62、激活可视化卷积神经网络(matalb)

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

 

 

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逼子格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值