【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例

这篇具有很好参考价值的文章主要介绍了【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文对神经网络各层特征图可视化的过程进行运行示例,方便大家使用,有助于更好的理解深度学习的过程,尤其是每层的结果。

神经网络各层特征图可视化的好处和特点如下:

可视化过程可以了解网络对图像像素的权重分布,可以了解网络对图像特征的提取过程,还可以剔除对特征表达无关紧要的像素,缩短网络训练时间,减少模型复杂度。
可以将复杂多维数据以图像形式呈现,帮助科研人员更好的理解数据特征,同时可以建立定量化的图像与病理切片的对应关系,为后续病理研究提供可视化依据。

本示例以一幅图象经过一层卷积输出为例进行。在自己运行时可以多加几层卷积和调整相应的输出通道等操作。

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import math
from torchvision import transforms
# 定义一个卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=2, padding=1)

# 输入图像(随机生成)
image = Image.open("../11111.jpg")
#input_image = torch.randn(1, 3, 224, 224)
transform = transforms.Compose([
    transforms.ToTensor()
])

# 对图像应用转换操作
input_image= transform(image)
input_image = input_image.unsqueeze(0)

# 通过卷积层获取特征图
feature_map = conv_layer(input_image)

batch, channels, height, width = feature_map.shape
blocks = torch.chunk(feature_map[0].cpu(), channels, dim=0)
n = min(32, channels)  # number of plots
fig, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True)  # 8 rows x n/8 cols
ax = ax.ravel()
plt.subplots_adjust(wspace=0.05, hspace=0.05)
for i in range(n):
    ax[i].imshow(blocks[i].squeeze().detach().numpy())  # cmap='gray'
    ax[i].axis('off')
plt.savefig('./tezhengtu.jpg', dpi=300, bbox_inches='tight')
plt.show()
plt.close()

代码解释:
步骤1 定义一个卷积层(Convolutional Layer):conv_layer,该卷积层有3个输入通道,64个输出通道, kernel size为3x3,步长为2,填充为1。
步骤2输入图像:这里使用了一个真实的图像文件路径"…/11111.jpg"作为输入图像。你可以替换为你自己的图像文件路径。
步骤3定义一个图像转换操作(transform)序列,用于将输入图像转换为PyTorch需要的张量格式。这里仅包含一个操作:转换为张量(ToTensor)。
步骤4对输入图像应用转换操作:通过transform(image)将图像转换为PyTorch张量,然后通过unsqueeze(0)增加一个额外的维度(batch维度),使得输入图像的形状变为(1, 3, H, W)。

步骤5通过卷积层获取特征图:将输入图像传递给卷积层conv_layer,得到特征图feature_map。
步骤6将特征图转换为numpy数组:为了可视化,需要将特征图从PyTorch张量转换为numpy数组。这里使用了detach().numpy()方法来实现转换。
步骤7获取特征图的一些属性:使用shape属性获取特征图的batch大小、通道数、高度和宽度。
步骤8分块显示特征图:为了在图像中显示特征图,需要将特征图分块处理。这里使用torch.chunk方法将特征图按照通道数分割成若干块,每一块代表一个通道的输出。然后使用Matplotlib库中的subplot功能将分块后的图像显示在画布上。具体地,这段代码将分块后的图像显示在一个8x8的画布上,每个小图的尺寸为256x256像素(因为最后一块图像可能不足8个通道,所以使用了最少的小图数量)。最后使用savefig方法保存图像到文件,并关闭Matplotlib的画布。

输入的图像为:
python神经网络可视化,Python学习和使用过程积累,python,神经网络,开发语言,深度学习,人工智能,pytorch
经过一层卷积之后的特征图为:

python神经网络可视化,Python学习和使用过程积累,python,神经网络,开发语言,深度学习,人工智能,pytorch文章来源地址https://www.toymoban.com/news/detail-756032.html

到了这里,关于【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一维卷积神经网络理解(torch.nn.Conv1d)

    in_channels : (int)输入数据的通道数,即对某条训练数据来说由多少组向量表示。例如对于由一维向量表示的一条数据来说,通道数为1;对于文本数据来说,一个句子是由m个单词组成,那么通道数就可以是m out_channels : (int)卷积产生的通道数,可以理解为卷积核的个数 kernel_siz

    2023年04月08日
    浏览(30)
  • 神经网络输出中间特征图

    在进行神经网络的训练过程中,会生成不同的特征图信息,这些特征图中包含大量图像信息,如轮廓信息,细节信息等,然而,我们一般只获取最终的输出结果,至于中间的特征图则很少关注。 前两天师弟突然问起了这个问题,但我也没有头绪,后来和师弟研究了一下,大概

    2024年02月09日
    浏览(29)
  • 神经网络基础-神经网络补充概念-12-向量化逻辑回归的梯度输出

    我们首先定义了 compute_gradient 函数,它计算梯度向量。然后,在 batch_gradient_descent 函数中使用向量化的梯度计算,从而避免了循环操作。 这种向量化的梯度计算方法可以有效地处理多个样本,从而提高代码的性能。

    2024年02月12日
    浏览(26)
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四)

    思索了很久到底要不要出深度学习内容,毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新,很多坑都没有填满,而且现在深度学习的文章和学习课程都十分的多,我考虑了很久决定还是得出神经网络系列文章,不然如果以后数学建模竞赛或者是其他更优化模

    2024年02月10日
    浏览(31)
  • 【深度学习】2-3 神经网络-输出层设计

    前馈神经网络(Feedforward Neural Network),之前介绍的单层感知机、多层感知机等都属于前馈神经网络,它之所以称为前馈(Feedforward),或许与其信息往前流有关:数据从输入开始,流过中间计算过程,最后达到 输出层 。 下面来看输出层如何设计 机器学习的问题大致可以分为分类

    2024年02月10日
    浏览(22)
  • GoogLeNet卷积神经网络输出数据形参分析-笔记

    GoogLeNet卷积神经网络输出数据形参分析-笔记 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [1024, 1] [1] 子空间执行逻辑 其中拼接张量情况为: 拼接代码:paddle.concat([p1, p2, p3, p4], axis=1) 如 p1=[10,64,5,6,56] p2=[10,128,56,56] p3=[10,32,56,56] p4=[10,32,56,56] 拼接后结果

    2024年02月14日
    浏览(27)
  • ResNet50卷积神经网络输出数据形参分析-笔记

    ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块,其中第2到第5个模块分别包含3、4、6、3个残差块 50=49个卷积(3+4+6+3)*3+1和一个全连接层 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [2048, 1] [1] ResNet50包含多个模块,其中第2到第5个模

    2024年02月14日
    浏览(34)
  • 【环境搭建】MacOS系统M1芯片从零开始安装torch torch-geometric(PyG) torch-sparse torch-scatter步骤详解、配置图神经网络(GNN)训练环境教程

    前言:实际上只装PyTorch或者torch不会遇到什么问题,但是torch-geometric、torch-scatter、torch-sparse在M1 chip的Mac上非常难安装( PyG DocumentationInstallation 里注明了“Conda packages are currently not available for M1/M2/M3 macs”)。博主试错过程中遇到了很多无解的bug,还把conda搞炸了,最终不得不

    2024年02月02日
    浏览(28)
  • 如何使用torch.nn.utils.prune稀疏神经网络,以及如何扩展它以实现自己的自定义剪裁技术

    最新的深度学习技术依赖于难以部署的过度参数化模型。 相反,已知生物神经网络使用有效的稀疏连通性。 为了减少内存,电池和硬件消耗,同时又不牺牲精度,在设备上部署轻量级模型并通过私有设备上计算来确保私密性,确定通过减少模型中的参数数量来压缩模型的最

    2024年02月12日
    浏览(35)
  • 回归预测 | MATLAB实现GRNN广义回归神经网络多输入多输出预测

    预测效果 基本介绍 MATLAB实现GRNN广义回归神经网络多输入多输出预测,输入10个特征,输出3个变量,程序乱码是由于版本不一致导致,可以用记事本打开复制到你的文件,运行环境MATLAB2018b及以上。 命令窗口输出MAE和R2,可在下载区获取数据和程序内容。 程序设计 完整程序和

    2024年02月12日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包