个人网站论文设计内容简介,wordpress 分类文章列表,门户网站建设文案,网站建设年终总结本文对神经网络各层特征图可视化的过程进行运行示例#xff0c;方便大家使用#xff0c;有助于更好的理解深度学习的过程#xff0c;尤其是每层的结果。
神经网络各层特征图可视化的好处和特点如下#xff1a;
可视化过程可以了解网络对图像像素的权重分布#xff0c;可…本文对神经网络各层特征图可视化的过程进行运行示例方便大家使用有助于更好的理解深度学习的过程尤其是每层的结果。
神经网络各层特征图可视化的好处和特点如下
可视化过程可以了解网络对图像像素的权重分布可以了解网络对图像特征的提取过程还可以剔除对特征表达无关紧要的像素缩短网络训练时间减少模型复杂度。 可以将复杂多维数据以图像形式呈现帮助科研人员更好的理解数据特征同时可以建立定量化的图像与病理切片的对应关系为后续病理研究提供可视化依据。
本示例以一幅图象经过一层卷积输出为例进行。在自己运行时可以多加几层卷积和调整相应的输出通道等操作。
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_channels3, out_channels64, kernel_size3, stride2, padding1)# 输入图像随机生成
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, dim0)
n min(32, channels) # number of plots
fig, ax plt.subplots(math.ceil(n / 8), 8, tight_layoutTrue) # 8 rows x n/8 cols
ax ax.ravel()
plt.subplots_adjust(wspace0.05, hspace0.05)
for i in range(n):ax[i].imshow(blocks[i].squeeze().detach().numpy()) # cmapgrayax[i].axis(off)
plt.savefig(./tezhengtu.jpg, dpi300, bbox_inchestight)
plt.show()
plt.close()代码解释 步骤1 定义一个卷积层Convolutional Layerconv_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的画布。
输入的图像为 经过一层卷积之后的特征图为