显示每一卷积层输出图像

在深度学习中,可以将每一层的卷积结果进行输出显示或保存。该代码可以实现每一层的卷积结果进行输出显示或保存。可以查看每一个卷积之后的效果。
代码:

# 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()

这里需要注意,全连接层无法显示图像。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值