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

news2024/9/23 23:32:05

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ROS2】中级:RViz-构建自定义 RViz 显示

背景 在 RViz 中有许多类型的数据已经有现有的可视化。然而,如果有一种消息类型尚未有插件来显示它,那么有两种选择可以在 RViz 中查看它。 将消息转换为另一种类型,例如 visualization_msgs/Marker 。编写自定义 RViz 显示。 使用第一个选项…

成为CMake砖家(5): VSCode CMake Tools 插件基本使用

大家好,我是白鱼。 之前提到过,白鱼的主力 编辑器/IDE 是 VSCode, 也提到过使用 CMake Language Support 搭配 dotnet 执行 CMakeLists.txt 语法高亮。 对于阅读 CMakeLists.txt 脚本, 这足够了。 而在 C/C 开发过程中&#xff…

数据结构(单链表(2))

单链表的实现 SList.h 由于代码中已有大量注释&#xff0c;所以该文章主要起到补充说明作用。 &#xfeff;#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义链表&#xff08;结点&#xff09;的结构typedef int SLTDataType…

MySQL in 太多过慢的 3 种解决方案

文章目录 解决方案一&#xff1a;使用 JOIN 替代 IN示例&#xff1a; 解决方案二&#xff1a;分批处理 IN 子句示例&#xff1a; 解决方案三&#xff1a;使用临时表示例&#xff1a; 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)…

力扣刷题之978.最长湍流子数组

题干要求&#xff1a; 给定一个整数数组 arr &#xff0c;返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是 湍流子数组 。 更正式地来说&#xff0c;当 arr 的子数组 A[i], A[i1], ..., A[j] 满足仅满足下列条…

基于用户鼠标移动的规律可以对用户身份进行连续验证的方法

概述 论文地址&#xff1a;https://arxiv.org/abs/2403.03828 本文重点论述了高效可靠的用户身份验证方法在计算机安全领域的重要性。它研究了使用鼠标移动动态作为连续身份验证新方法的可能性。具体来说&#xff0c;本文分析了用户在两个不同游戏场景–团队要塞和聚能桥–中…

关于Kafka Topic分区和Replication分配的策略

文章目录 1. Topic多分区2. 理想的策略3. 实际的策略4. 如何自定义策略 1. Topic多分区 如图&#xff0c;是一个多分区Topic在Kafka集群中可能得分配情况。 P0-RL代表分区0&#xff0c;Leader副本。 这个Topic是3分区2副本的配置。分区尽量均匀分在不同的Broker上&#xff0c…

自动驾驶-2D目标检测

yolo及yolo的变体 anchor boxes (锚框) intersection over union 并集交集 用于计算两个边界框的差异程度 bounding box predictions 边界框预测 non maximum suppression非极大值抑制 为了分离这些边界框并为每个对象获得单个边界框&#xff0c;我们使用IOU。这种获取单…

Ubuntu 安装 XRDP,替代系统自带RDP远程桌面

起因&#xff0c;Ubuntu的自带RDP远程桌面很好用&#xff0c;但很傻卵&#xff0c;必须登录。 而设置了自动登录也不能解开KEYRING&#xff0c;必须必须必须用GUI手动登录。 &#xff08;我远程我用头给你坐机子面前开显示器先登录&#xff1f;&#xff1f;&#xff09; 比起VN…

vue3 快速入门 (二) : 实现第一个Vue网页,并在手机上浏览

1. 最简单的一个VUE网页 首先&#xff0c;我们可以看我的这篇文章 : vue3 快速入门 (一) : 环境配置与搭建 完成环境搭建。 接着就可以来实现我们的第一个Vue网页了。 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 1.1 基础模板 vu…

使用OpenCV寻找图像中的轮廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大量的视觉处理功能&#xff0c;包括图像和视频捕获、特征检测与匹配、图像变换、图像分割、颜色空间转换等。在图像处理中&#xff0c;寻找图像中的…

Gocator Acquisition for Cognex VisionPro(LMI相机图像获取)

概述 VisionPro 是个很强大的视觉软件, 我们很乐意我们的客户在VisionPro 环境中使用Gocator产品。 实现方法 在 VisionPro 环境下配置 Gocator 产品两种方法: ● 方法一: 创建一个 QuickBuild Job,在 Job 编辑器添加 Job Script,插入 Gocator 的 SDK,编辑简 单脚本就 OK。 …

基于MATHCAD的傅里叶级数模拟和方波图像绘制

一、MATHCAD软件简介 MATHCAD是一款功能强大的数学计算软件&#xff0c;它允许用户以类似手写公式的方式输入数学表达式&#xff0c;并即时显示计算结果和图形。在工程研究和学术写作的世界里&#xff0c;MathCAD以其强大的符号运算能力和直观的数学书写体验脱颖而出。MATHCAD…

防火墙nat基础实验

一&#xff0c;实验拓扑&#xff1a; 二&#xff0c;实验需求&#xff1a; 1&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

以数据编织,重构数据管理新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 人工智能几乎统一了全球最顶尖科技公司的认知&#xff1a;这个时代&#xff0c;除了AI&#xff0c;没有第二条路可走。 人工智能的技术逻辑颇有一种“暴力美学”&#xff0c;它依托于海量大数据和超高算力的训练和推理&#xff…

MySQL里的累计求和

在MySQL中&#xff0c;你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和&#xff0c;可以使用OVER()子句与ORDER BY子句结合&#xff0c;进行窗口函数的操作。 以下是一个简单的例子&#xff0c;假设我们有一个名为sales的表&#xff0c;它有两个列&#x…

Redis 三大高可用模式:主从、哨兵、集群

一、引言 Redis&#xff0c;作为一种开源的、基于内存的数据结构存储系统&#xff0c;被广泛应用于各种场景&#xff0c;包括缓存、消息队列、短期存储等。 单一实例的工作模式通常无法保证Redis的可用性和拓展性&#xff0c;Redis提供了三种分布式方案&#xff1a; 主从模式…

【精品资料】智慧党建信息化建设方案(32页PPT)

引言&#xff1a;随着信息技术的快速发展&#xff0c;传统党建模式面临着信息传递不及时、党员教育管理手段单一、党组织活动参与度不高等挑战。智慧党建作为数字化转型的重要方向&#xff0c;能够有效解决上述问题&#xff0c;推动党建工作向更高质量发展。 方案介绍&#xff…

MySQL高级面试点

Explain语句结果中各个字段分别代表什么 id&#xff1a;查询语句没出现一个select关键字&#xff0c;MySQL就会给他分配一个唯一id select_type&#xff1a; select关键字对应哪个查询的类型 simple&#xff1a;简单的查询 不包含任何子查询 primary&#xff1a;查询中如果…

SparkStreaming--scala

文章目录 第1关&#xff1a;QueueStream代码 第2关&#xff1a;File Streams代码 第1关&#xff1a;QueueStream 任务描述 本关任务&#xff1a;编写一个清洗QueueStream数据的SparkStreaming程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何使用S…