使用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站视频分辨率不太好,感觉跟全屏时的清晰度差很多,但是不全屏的话就截图都截不清楚,那么就拖拽网页页面左右划拉一下试试,就会变清晰

相关推荐
消晨消晨4 分钟前
Pytorch初上手——Dataset自定义数据集与Dataloader数据加载器
人工智能·pytorch·python
covco34 分钟前
星链引擎矩阵系统:分布式任务调度与万级账号批量作业自动化技术实践
分布式·矩阵·自动化·批量作业
动物园猫1 小时前
交通标识与信号灯数据集分享(适用于YOLO系列深度学习检测任务)
人工智能·深度学习·yolo
书生的梦2 小时前
《神经网络与深度学习》学习笔记(一)
笔记·深度学习·神经网络
kcuwu.2 小时前
(多代码实现版)PyTorch神经网络入门博客
人工智能·pytorch·神经网络
AI医影跨模态组学2 小时前
Insights Imaging(IF=4.5)郑州大学第一附属医院高剑波等团队:基于CT的影像组学预测不可切除胃癌PD-1/PD-L1抑制剂联合化疗治疗反应
人工智能·深度学习·论文·医学·医学影像·影像组学
沪漂阿龙2 小时前
面试题:Transformer 模型详解——核心创新、编码器解码器结构、位置编码、因果掩码与大模型基础全解析
人工智能·深度学习·transformer
沪漂阿龙2 小时前
面试题:预训练模型详解——GPT、BERT、T5 结构与训练目标、预训练微调范式、Transformers 加载 BERT 实战全解析
人工智能·深度学习
qwert10372 小时前
相机视图矩阵的由来:从空间感知到图形渲染的核心桥梁
数码相机·矩阵·图形渲染
数据门徒3 小时前
神经网络原理 第八章:主分量分析
人工智能·深度学习·神经网络