使用pytorch查看中间层特征矩阵以及卷积核参数

这篇是我对哔哩哔哩up主 @霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享

1和4是之前讲过的alexnet和resnet模型

2是分析中间层特征矩阵的脚本

3是查看卷积核参数的脚本

1设置预处理方法 和图像训练的时候用的预处理方法保持一致

2实例化模型

3载入之前的模型参数

4载入一张图片

5对图片进行预处理

6增加一个batch维度

7输入模型进行正向传播

如果print model可以看到模型信息:

模型虽然用的是alexnet,但是关于正向传播的代码做了一些修改:

因为我们目的是得到中间层的特征矩阵。

希望能遍历第一、第二、第三个卷积层并得到特征矩阵。

首先通过一个循环遍历我们features的层结构,通过named_children这个方法遍历features下面的所有层结构。

对于每一个层结构都用x=module(x)以实现正向传播的过程

回到analyze_feature_map.py

squeeze一下因为我们输入只有一个图片所以我们不需要N这个维度

然后transpose一下通道顺序

im[:,:,i]通过切片的方法获取每一个channel的特征矩阵

cmap='gray'表示用灰度图的方法来表示

如果不加这个,那默认就会用蓝色和绿色来替代灰度图的黑色和白色来展示

这就是我们第一个卷积层输出的特征矩阵的前12个通道的特征图

可以和原图对比一下:

卷积层2所输出的特征矩阵:

可以看到有的通道是纯黑的,也就是说有的卷积核是没有起到任何作用的,就是没有学到东西

卷积层越往后抽象程度越高

如果不加cmap=gray:

接下来我们看一下如何查看网络卷积层的卷积核的信息

我们其实可以直接通过torch.load载入模型参数,返回的是一个dict字典形式,key是层名称value就是该层的训练信息。

state_dict() 来获取模型中所有可训练参数的字典keys()获取所有具有参数的层结构的名称

只有卷积层有训练参数,relu和maxpool2d是没有训练参数的

卷积核的个数对应输出矩阵的深度

卷积核的通道数对应输入矩阵的深度

这一句是为了排除编程结构的一些不需要的信息

另外,如果B站视频分辨率不太好,感觉跟全屏时的清晰度差很多,但是不全屏的话就截图都截不清楚,那么就拖拽网页页面左右划拉一下试试,就会变清晰

相关推荐
长沙红胖子Qt2 分钟前
深度学习开发笔记(一):跨平台纯C++训练和推理框架LibTorch介绍、开发环境搭建和Demo
pytorch·深度学习·c++深度学习·纯c++训练
盼小辉丶8 分钟前
Transformer实战(40)——Transformer时间序列数据建模
深度学习·transformer·时间序列预测
思绪无限15 分钟前
YOLOv5至YOLOv12升级:自动驾驶目标检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·自动驾驶·yolov12·yolo全家桶
源码之家15 分钟前
计算机毕业设计:Python农产品智能推荐与可视化分析系统 Flask框架 矩阵分解 数据分析 可视化 协同过滤推荐算法 深度学习(建议收藏)✅
python·矩阵·数据挖掘·数据分析·django·flask·课程设计
思绪无限35 分钟前
YOLOv5至YOLOv12升级:草莓成熟度检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·草莓成熟度检测·yolov12·yolo全家桶
今日说"法"38 分钟前
线性代数与矩阵运算:向量、矩阵、特征值、SVD 在 AI 中的全面应用
人工智能·线性代数·矩阵
今日说"法"43 分钟前
线性代数与矩阵运算:AI 背后的数学基石
人工智能·线性代数·矩阵
思绪无限1 小时前
YOLOv5至YOLOv12升级:吸烟行为检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·深度学习·yolo·目标检测·yolov12·yolo全家桶·吸烟行为检测
<-->1 小时前
【tuner passes compile compress autotp】
人工智能·python·深度学习
m0_564876841 小时前
提示词应用
深度学习·学习·算法