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

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

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

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

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第1张图片

使用pytorch查看中间层特征矩阵以及卷积核参数_第2张图片

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

2实例化模型

使用pytorch查看中间层特征矩阵以及卷积核参数_第3张图片

3载入之前的模型参数

使用pytorch查看中间层特征矩阵以及卷积核参数_第4张图片

4载入一张图片

5对图片进行预处理

6增加一个batch维度

使用pytorch查看中间层特征矩阵以及卷积核参数_第5张图片

7输入模型进行正向传播

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第6张图片

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第7张图片

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第8张图片

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

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

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

回到analyze_feature_map.py

使用pytorch查看中间层特征矩阵以及卷积核参数_第9张图片

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

然后transpose一下通道顺序

使用pytorch查看中间层特征矩阵以及卷积核参数_第10张图片

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

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

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第11张图片

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

可以和原图对比一下:  

使用pytorch查看中间层特征矩阵以及卷积核参数_第12张图片

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第13张图片

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

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

如果不加cmap=gray:

使用pytorch查看中间层特征矩阵以及卷积核参数_第14张图片

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第15张图片

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

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

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第16张图片

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

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

使用pytorch查看中间层特征矩阵以及卷积核参数_第17张图片

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

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

你可能感兴趣的:(pytorch,矩阵,深度学习)