在深度学习中,可以将每一层的卷积结果进行输出显示或保存。该代码可以实现每一层的卷积结果进行输出显示或保存。可以查看每一个卷积之后的效果。 代码:
# 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()这里需要注意,全连接层无法显示图像。