1.33、激活可视化卷积神经网络(matalb)
创始人
2025-01-07 06:06:27
0次

1、激活可视化卷积神经网络原理及流程

激活可视化(Activation Visualization)指的是通过可视化神经网络中激活函数的输出,来理解神经网络是如何学习并提取特征的过程。在卷积神经网络(CNN)中,我们可以通过可视化激活来观察每个卷积层的特征图,从而更好地理解网络学到的特征。

以下是在MATLAB中激活可视化卷积神经网络的基本原理及流程:

  1. 加载预训练的CNN模型:首先,需要加载预训练好的CNN模型,比如VGG、ResNet等。MATLAB提供了工具箱(如Deep Learning Toolbox)来支持加载和使用这些预训练模型。

  2. 选择要可视化的卷积层:在加载模型后,选择要可视化的具体卷积层。一般来说,选择靠近输出层的卷积层效果比较好,因为这些层更抽象地表示了输入图像的特征。

  3. 提取特征图:通过将输入图像传递给加载的CNN模型,并获取所选卷积层的输出特征图。在MATLAB中可以使用提供的函数来实现这一步骤。

  4. 可视化激活:最后,可以通过将提取的特征图进行可视化,如绘制热图(heatmap)来展示每个特征图的激活程度。这可以帮助我们看到网络是如何在不同层次上学习到不同的特征,并理解其工作原理。

总的来说,激活可视化是一种强大的工具,可以帮助我们理解卷积神经网络的内部工作机制,以及网络是如何对输入数据进行处理和特征提取的。在MATLAB中,使用预训练模型和相应的工具函数可以相对容易地实现这一过程。

2、激活可视化卷积神经网络说明

1)方案

将图像馈送到卷积神经网络并显示网络的不同层的激活

2)实现

通过将激活区域与原始图像进行比较,检查激活并发现网络学习的特征。发现较浅层中的通道学习颜色和边缘等简单特征,而较深层中的通道学习复杂特征。

3、加载预训练的网络和数

1)加载预训练的网络和数据

代码

net = squeezenet;

2)读取并显示图像,保存图像大小

代码

im = imread('C:\Users\16023\Desktop\激活可视化卷积神经网络\CT1.png'); imshow(im) imgSize = size(im); imgSize = imgSize(1:2);

视图效果

ade53548521740d2a5ab573592ba8519.png

4、查看网络架构

1)说明

卷积层使用可学习的参数执行卷积。网络学习识别有用的特征,通常每个通道对应一个特征。观察到第一个卷积层有 64 个通道。

图像输入层指定输入大小,可以在将图像通过网络之前调整图像大小,

2)实现代码

analyzeNetwork(net)

3)视图效果

c5fca8ee07a14a9d9bb28b657e903483.png

5、显示第一个卷积层的激活

1)说明1

观察卷积层中的哪些区域在图像上激活,并将其与原始图像中的相应区域进行比较,以研究特征。卷积神经网络的每层由许多称为通道的二维数组组成。用图像对网络进行一轮训练,并检查 conv1 层的输出激活。

2)实现代码

act1 = activations(net,im,'conv1');

3) 说明2

激活以三维数组的形式返回,其中第三个维度对 conv1 层上的通道进行索引。要使用 imtile 函数显示这些激活,请将数组重构为四维。imtile 的输入中的第三个维度表示图像颜色。将第三个维度的大小设置为 1,因为激活没有颜色。第四个维度对通道进行索引。

4)实现代码

sz = size(act1); act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]);

5)显示激活

说明:每个激活都可能采用任何值,因此请使用 mat2gray 归一化输出。缩放所有激活值,以使最小激活值为 0,最大激活值为 1。在 8×8 网格上显示 64 个图像,层中的每个通道对应一个图像。

6)实现代码

I = imtile(mat2gray(act1),'GridSize',[8 8]); imshow(I)

7)视图效果

 a32ac66755524d66a85bb0b84e15716c.png

6、调查特定通道中的激活

1)说明

激活网格中的每个图块都是 conv1 层中某个通道的输出。白色像素表示强的正激活,黑色像素表示强的负激活。主要为灰色的通道未对输入图像进行强烈激活。通道激活中的像素位置对应于原始图像中的相同位置。通道中某个位置的白色像素表示该通道在该位置强激活。

调整通道 22 中的激活大小以使其与原始图像具有相同的大小,并显示激活。

2)代码

act1ch22 = act1(:,:,:,22); act1ch22 = mat2gray(act1ch22); act1ch22 = imresize(act1ch22,imgSize);  I = imtile({im,act1ch22}); imshow(I)

3)视图效果

 9addff80ce2143398138ee6c447e9125.png

7、查找最强的激活通道

1)说明

使用 max 函数查找具有最多激活值的通道,调整大小并显示这些激活值

2)代码

[maxValue,maxValueIndex] = max(max(max(act1))); act1chMax = act1(:,:,:,maxValueIndex); act1chMax = mat2gray(act1chMax); act1chMax = imresize(act1chMax,imgSize);  I = imtile({im,act1chMax}); imshow(I)

3)视图效果

fc2ff8ca60ea4fefa892bfa6df5151fd.png

8、调查更深的层

1)说明

多数卷积神经网络在第一个卷积层中学习检测颜色和边缘等特征。在更深的卷积层中,网络学习检测更复杂的特征。较深的层通过组合较浅层的特征来构建其特征。

2)调查 fire6-squeeze1x1 层

以调查 conv1 层的方式调查 fire6-squeeze1x1 层。计算、重构并在网格中显示激活。

3)代码

act6 = activations(net,im,'fire6-squeeze1x1'); sz = size(act6); act6 = reshape(act6,[sz(1) sz(2) 1 sz(3)]);  I = imtile(imresize(mat2gray(act6),[64 64]),'GridSize',[6 8]); imshow(I)

4)视图效果

9a599dccad5f4f3dba68dae58bf39856.png

5)显示 fire6-squeeze1x1 层中最强的激活

代码

[maxValue6,maxValueIndex6] = max(max(max(act6))); act6chMax = act6(:,:,:,maxValueIndex6); imshow(imresize(mat2gray(act6chMax),imgSize))

视图效果 

a7a6ab444d354b42a3b7666e0de1705d.png

6)调查通道 14 和 47

代码

I = imtile(imresize(mat2gray(act6(:,:,:,[14 47])),imgSize)); imshow(I)

视图效果

3952d218f7cd45c3b5006683001d1c57.png

7) 可视化 fire6-relu_squeeze1x1 层的激活

代码

act6relu = activations(net,im,'fire6-relu_squeeze1x1'); sz = size(act6relu); act6relu = reshape(act6relu,[sz(1) sz(2) 1 sz(3)]);  I = imtile(imresize(mat2gray(act6relu(:,:,:,[14 47])),imgSize)); imshow(I)

视图效果

dd4e8227b5214c3c9a0811d6fd63a1bb.png

9、总结

激活可视化是一种重要的技术,可以帮助我们理解卷积神经网络(CNN)中每个卷积层学到的特征,并揭示网络对输入数据的处理方式。在MATLAB中,可以通过以下步骤实现激活可视化:

  1. 加载预训练的CNN模型:使用MATLAB的Deep Learning Toolbox加载预训练好的CNN模型,比如VGG、ResNet等。

  2. 选择要可视化的卷积层:选择CNN模型中的某个卷积层,通常选择靠近输出层的卷积层以观察更抽象的特征。

  3. 提取特征图:通过将输入图像传入 CNN 模型并获取选择的卷积层的输出特征图。

  4. 可视化激活:对提取的特征图进行可视化,例如生成热图(heatmap)展示每个特征图的激活程度。

激活可视化可以帮助我们更好地理解神经网络的工作原理,识别网络中学到的关键特征,优化网络结构和调整超参数。通过MATLAB提供的功能和工具,可以相对容易地进行激活可视化的实现,从而加深对 CNN 内部工作方式的理解,并进一步改进和优化模型效果。

9、源代码

代码

%% 激活可视化卷积神经网络 %将图像馈送到卷积神经网络并显示网络的不同层的激活 %通过将激活区域与原始图像进行比较,检查激活并发现网络学习的特征。发现较浅层中的通道学习颜色和边缘等简单特征,而较深层中的通道学习眼睛等复杂特征。   %% 加载预训练的网络和数据 %加载预训练的网络和数据 net = squeezenet; %读取并显示图像,保存图像大小, im = imread('C:\Users\16023\Desktop\激活可视化卷积神经网络\CT1.png'); imshow(im) imgSize = size(im); imgSize = imgSize(1:2); %% 查看网络架构 %卷积层使用可学习的参数执行卷积。网络学习识别有用的特征,通常每个通道对应一个特征。观察到第一个卷积层有 64 个通道。 %图像输入层指定输入大小,可以在将图像通过网络之前调整图像大小,  analyzeNetwork(net) %% 显示第一个卷积层的激活 %观察卷积层中的哪些区域在图像上激活,并将其与原始图像中的相应区域进行比较,以研究特征。卷积神经网络的每层由许多称为通道的二维数组组成。用图像对网络进行一轮训练,并检查 conv1 层的输出激活。 act1 = activations(net,im,'conv1'); %激活以三维数组的形式返回,其中第三个维度对 conv1 层上的通道进行索引。要使用 imtile 函数显示这些激活,请将数组重构为四维。imtile 的输入中的第三个维度表示图像颜色。将第三个维度的大小设置为 1,因为激活没有颜色。第四个维度对通道进行索引。  sz = size(act1); act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]); %显示激活。每个激活都可能采用任何值,因此请使用 mat2gray 归一化输出。缩放所有激活值,以使最小激活值为 0,最大激活值为 1。在 8×8 网格上显示 64 个图像,层中的每个通道对应一个图像。 I = imtile(mat2gray(act1),'GridSize',[8 8]); imshow(I)  %% 调查特定通道中的激活 %激活网格中的每个图块都是 conv1 层中某个通道的输出。白色像素表示强的正激活,黑色像素表示强的负激活。主要为灰色的通道未对输入图像进行强烈激活。通道激活中的像素位置对应于原始图像中的相同位置。通道中某个位置的白色像素表示该通道在该位置强激活。 %调整通道 22 中的激活大小以使其与原始图像具有相同的大小,并显示激活。 act1ch22 = act1(:,:,:,22); act1ch22 = mat2gray(act1ch22); act1ch22 = imresize(act1ch22,imgSize);  I = imtile({im,act1ch22}); imshow(I) %% 查找最强的激活通道 %使用 max 函数查找具有最多激活值的通道,调整大小并显示这些激活值。 [maxValue,maxValueIndex] = max(max(max(act1))); act1chMax = act1(:,:,:,maxValueIndex); act1chMax = mat2gray(act1chMax); act1chMax = imresize(act1chMax,imgSize);  I = imtile({im,act1chMax}); imshow(I)  %% 调查更深的层 %多数卷积神经网络在第一个卷积层中学习检测颜色和边缘等特征。在更深的卷积层中,网络学习检测更复杂的特征。较深的层通过组合较浅层的特征来构建其特征。 %以调查 conv1 层的方式调查 fire6-squeeze1x1 层。计算、重构并在网格中显示激活。 act6 = activations(net,im,'fire6-squeeze1x1'); sz = size(act6); act6 = reshape(act6,[sz(1) sz(2) 1 sz(3)]);  I = imtile(imresize(mat2gray(act6),[64 64]),'GridSize',[6 8]); imshow(I) %显示 fire6-squeeze1x1 层中最强的激活。 [maxValue6,maxValueIndex6] = max(max(max(act6))); act6chMax = act6(:,:,:,maxValueIndex6); imshow(imresize(mat2gray(act6chMax),imgSize)) %调查通道 14 和 47。 I = imtile(imresize(mat2gray(act6(:,:,:,[14 47])),imgSize)); imshow(I) %可视化 fire6-relu_squeeze1x1 层的激活 act6relu = activations(net,im,'fire6-relu_squeeze1x1'); sz = size(act6relu); act6relu = reshape(act6relu,[sz(1) sz(2) 1 sz(3)]);  I = imtile(imresize(mat2gray(act6relu(:,:,:,[14 47])),imgSize)); imshow(I)

工程文件

https://download.csdn.net/download/XU157303764/89496035

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...