각 볼륨 레이어 출력 이미지 표시

딥러닝에서는 각 레이어의 볼륨 결과를 출력하여 표시하거나 저장할 수 있습니다.이 코드는 각 층의 볼륨 결과를 출력하거나 저장할 수 있다.각 볼륨 이후의 효과를 볼 수 있습니다.코드:
# coding=utf-8

import tensorflow as tf
import numpy as np
import pdb
from datetime import datetime
import cv2
import os
import matplotlib.pyplot as plt


def conv_imshow(path, model, layer_type, layer_name):
    model_dir = "./model/"  # model.ckpt     
    #             
    reader = tf.train.NewCheckpointReader(tf.train.get_checkpoint_state(model_dir).model_checkpoint_path)
    im = cv2.imread(path)
    im = cv2.resize(im, (224, 224))  # * (1. / 255)
    in_put = np.expand_dims(im, axis=0)
    in_put = tf.convert_to_tensor(in_put, dtype=tf.float32)     # np tf

    #     
    for name in model:
        ind = int(np.argwhere(model == name))           #       
        if layer_type[ind] != 'pool':                   # maxpooling    ,     
            weights = reader.get_tensor(name)
        if layer_type[ind] == 'weights':
            in_put = tf.nn.conv2d(in_put, weights, strides=[1, 1, 1, 1], padding='SAME')
        elif layer_type[ind] == 'bias':
            in_put = tf.nn.relu(tf.nn.bias_add(in_put, weights))
        elif layer_type[ind] == 'pool':
            in_put = tf.nn.max_pool(in_put, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')
        # elif layer_type[ind] == 'fw':
        #     in_put = tf.matmul(in_put, weights)
        # elif layer_type[ind] == 'fb':
        #     in_put = tf.nn.relu(tf.nn.bias_add(in_put, weights))
        else:
            break
        if name == layer_name:
            return in_put
    return in_put


if __name__ == '__main__':
    imgpath = './image/0.jpg'           #       
    #          
    model = np.array(['conv1_1/weights', 'conv1_1/bias', 'conv1_2/weights', 'conv1_2/bias', 'pool1',
                      'conv2_1/weights', 'conv2_1/bias', 'conv2_2/weights', 'conv2_2/bias', 'pool2',
                      'conv3_1/weights', 'conv3_1/bias', 'conv3_2/weights', 'conv3_2/bias', 'conv3_3/weights', 'conv3_3/bias', 'pool3',
                      'conv4_1/weights', 'conv4_1/bias', 'conv4_2/weights', 'conv4_2/bias', 'conv4_3/weights', 'conv4_3/bias', 'pool4',
                      'conv5_1/weights', 'conv5_1/bias', 'conv5_2/weights', 'conv5_2/bias', 'conv5_3/weights', 'conv5_3/bias', 'pool5',
                      'fc6/weights', 'fc6/bias', 'fc7/weights', 'fc7/bias', 'fc8/weights', 'fc8/bias'])
    #            
    layer_type = np.array(['weights', 'bias', 'weights', 'bias', 'pool',
                           'weights', 'bias', 'weights', 'bias', 'pool',
                           'weights', 'bias', 'weights', 'bias', 'weights', 'bias', 'pool',
                           'weights', 'bias', 'weights', 'bias', 'weights', 'bias', 'pool',
                           'weights', 'bias', 'weights', 'bias', 'weights', 'bias', 'pool',
                           'fw', 'fb', 'fw', 'fb'])

    conv = conv_imshow(imgpath, model, layer_type, 'pool1')

    sess = tf.InteractiveSession()
    sess.run(tf.global_variables_initializer())
    img_conv = sess.run(conv)
    img_conv_sum = np.sum(np.squeeze(img_conv), axis=2)             #       
    #     
    plt.imshow(img_conv_sum, cmap="gray")
    plt.savefig('./image/result.jpg')           #     
    plt.show()

    sess.close()

전체 연결층에서 그림을 표시할 수 없음을 주의해야 합니다.

좋은 웹페이지 즐겨찾기