显示每一卷积层输出图像

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

# 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
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在卷积神经网络中,卷积层输出特征可以被保存下来,以便在后续的处理中使用。保存方式通常有两种: 1. 保存为图片或特征图:将卷积层输出特征保存为图片或者特征图,可以方便地进行可视化分析和展示。可以使用Python中的Matplotlib库将卷积层输出的特征可视化。 2. 保存为向量:将卷积层输出特征保存为向量,可以方便地进行后续的分类、聚类等任务。可以使用Python中的Numpy库将卷积层输出的特征保存为向量。 无论采用何种方式保存卷积层输出特征,都可以通过在神经网络中添加相应的代码来实现。 ### 回答2: 在卷积神经网络中,卷积层输出特征是通过应用卷积操作来提取输入图像的局部特征。保存这些输出特征对于许多应用是很有用的。 首先,保存卷积层输出特征可以方便进行可视化和分析。通过观察卷积层输出特征图,我们可以了解网络在处理输入图像时提取到的主要特征。这有助于我们理解网络的工作方式,并可以帮助我们调整和改进网络设计。 其次,保存卷积层输出特征可以用于特征的重用。卷积神经网络中的卷积层通常会通过滑动窗口的方式来提取图像的不同区域的特征。由于滑动窗口是局部性的操作,因此卷积层输出特征也是具有一定局部性的。我们可以将这些输出特征保存下来,然后在其他任务或其他网络中重用这些特征。这可以提高网络的计算效率,并且有助于减少过拟合现象。 最后,保存卷积层输出特征也有助于可视化卷积层的学习。通过观察特定类别的输入图像卷积层输出特征上的激活情况,我们可以了解到网络对这些类别的敏感区域,从而对网络的学习过程提供指导。这可以帮助我们更好地理解卷积神经网络在图像分类、目标检测和图像分割等任务中的表现。 综上所述,保存卷积神经网络的卷积层输出特征对于可视化、特征重用和理解网络学习过程都是非常有用的。这可以提高网络的性能、减少计算负担,并且帮助我们更好地理解和改进卷积神经网络的工作原理。 ### 回答3: 在卷积神经网络(Convolutional Neural Network,CNN)中,卷积层输出特征是神经网络对输入数据进行特征提取的结果之一,因此保存卷积层输出特征对于后续的模型分析和应用非常重要。 保存卷积层输出特征有以下几个方面的考虑: 首先,卷积层输出特征可以用于可视化分析。通过保存卷积层输出特征,我们可以对网络学到的特征进行可视化,进一步理解网络的学习过程和模型中的参数。这有助于调试和改进网络模型。 其次,卷积层输出特征可以作为输入传递给其他模型进行进一步的分析和处理。例如,我们可以将卷积层输出特征作为输入传递给全连接层进行分类或回归任务。同时,卷积层输出特征也可以传递给其他模型进行特征融合或特征提取,以提高网络的性能和泛化能力。 最后,保存卷积层输出特征有助于提高网络的训练效率。在训练过程中,我们可以通过保存卷积层输出特征,避免重复计算。这样可以提高网络的训练速度和效率。 总之,保存卷积层输出特征对于深度学习模型的分析和应用具有重要意义。它不仅可以帮助可视化分析和改进网络模型,还可以作为其他模型的输入进行进一步的分析和处理,同时也可以提高网络的训练效率。因此,在使用卷积神经网络时,我们应该考虑保存卷积层输出特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值