第十九章 解读利用pytorch可视化特征图以及卷积核参数(工具)

介绍一种可视化feaature maps以及kernel weights的方法

推荐可视化工具TensorBoard:可以查看整个计算图的数据流向,保存再训练过程中的损失信息,准确率信息等

学习视频:

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

代码下载:

deep-learning-for-image-processing/pytorch_classification/analyze_weights_featuremap at master · WZMIAOMIAO/deep-learning-for-image-processing · GitHub

一、所需文件

AlexNet.pth 和 resNet34.pth 文件通过之前的训练获得

二、操作步骤

AlexNet 的中间层特征矩阵

1.在analyze_feature_map.py 文件的 out_put 处设置断点并debug,查看print model所打印的信息

  1. 打印两个层结构:第一个是features,第二个是classifier,与 alexnet_model.py文件中的所定义的层结构一一对应,如下图所示:
  1. 在 alexnet_model.py 文件的 for name, module in self.features.named_children(): 行设置断点并单步运行

得到name = 0 和卷积层conv 2d,后面以此类推

  1. 让程序接着运行到for循环处

查看out_put,是一个list,一共有三层,分别对应第一个,第二个,第三个卷积层的输出特征矩阵

5.让程序执行完

(1)输出为第一个卷积层 所输出的特征矩阵的前12个通道的特征图

通过特征图的明暗程度来理解卷积层一所关注的一些信息,亮度越高的地方就是卷积层越感兴趣的地方。

原图如下:

(2)卷积层二所输出的特征矩阵:抽象程度越来越高,有些卷积核没有起到作用

卷积层三 所输出的特征矩阵

(3)去掉cmap='gray'之后的颜色为蓝绿色

(4)如果想看更多信息,则在 alexnet_model.py 的向前传播过程中进行修改

假如要看全连接层的图像,则也要将输入的图像通过features层结构,再通过全连接层才能查看

resnet34 的中间层特征矩阵

1.修改代码并再下图处设置断点debug

可以再终端看到resnet的层结构

2.运行结果如图

明显resnet学习到的信息比 alexnet更多

有两个原因:resnet确实比alexnet更加优秀

​ resnet使用迁移学习的方法,并且预训练数据集是使用 imagenet 数据集进行训练的

3.layer1所输出的特征矩阵,明显比alexnet好很多,每一个特征层都有输出,都是有用的

AlexNet 的卷积核参数

  1. 打开 analyze_kernel_weight.py 文件

这里可以不用实例化模型,直接通过 torch.load 函数载入训练权重,因为通过 torch.load 载入后,就是一个字典类型,它的key就代表每个层结构的名称,对应的value就是每层的训练信息

  1. 通过 model.state_dict 函数获取模型中所有的可训练参数的字典,再通过keys方法获取所有的具有参数的层结构的名称

单步运行看一下weights_keys

如下图所示,weights_keys 是一个有序的keys,按照正向传播过程的顺序进行保存的

命名规则:

​ feature0,feature3,feature6,feature8,feature10等卷积层才有训练参数

​ 激活函数和最大池化下采样是没有激活函数的

3.接下来遍历 weights_keys

model.state_dict 函数获取模型中所有的可训练参数的字典信息,传入对应的key就得到了参数信息,再通过numpy方法将权值信息转化为numpy格式,方便分析

注意:卷积核通道的排列顺序是

​ kernel_number 卷积核个数,对应的输出特征矩阵的深度

​ kernel_channel 卷积核深度,对应的输入特征矩阵的深度

​ kernel_height, kernel_width,卷积核的高度和宽度

  1. 获得信息
cobol 复制代码
    # k = weight_t[0, :, :, :]  # 通过切片的方式获得信息

 

    # calculate mean, std, min, max    对所有卷积核的信息进行计算
    weight_mean = weight_t.mean()      #均值
    weight_std = weight_t.std(ddof=1)  #标准差
    weight_min = weight_t.min()        #最小值
    weight_max = weight_t.max()        #最大值

卷积层一对应的卷积核值的分布

卷积层一对应的偏置的分布

后面的都是一样的,不做展示

ResNet 的卷积核参数

1.第一个卷积层的分布

2.bn层的分布,使用bn时就不用使用偏置

weight就是下图的 参数

bias对应上图的 参数

mean对应的是均值 ,是统计得到的

方差 也是统计得到的

后面的输出都是一样的结构。

相关推荐
普通网友几秒前
Android16 adb投屏工具Scrcpy介绍。
人工智能
搬砖者(视觉算法工程师)2 分钟前
语义分割:基于 TensorFlow 对 FCN 与迁移学习的探究
人工智能
cookqq12 分钟前
基于Spring AI+本地大模型+MongoDB实现私密化与记忆能力-企业级免费大模型应用
人工智能·mongodb·spring
云卓SKYDROID18 分钟前
无人机飞行模式详解
人工智能·无人机·高科技·云卓科技·技术解析、
hnxaoli20 分钟前
统信小程序(八)归档目录自动调整
linux·python
喵手31 分钟前
Python爬虫实战:把“菜鸟教程”的知识树连根拔起(递归/遍历实战)(附 CSV 导出)!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·菜鸟教程数据采集·采集菜鸟教程于csv
数字游民952733 分钟前
小程序上新,猜对了么更新110组素材
人工智能·ai·小程序·ai绘画·自媒体·数字游民9527
七夜zippoe42 分钟前
gRPC高性能RPC框架实战:从Protocol Buffers到流式传输的完整指南
网络·python·网络协议·rpc·protocol
泰迪智能科技1 小时前
分享|联合编写教材入选第二批“十四五”职业教育国家规划教材名单
大数据·人工智能
Yongqiang Cheng1 小时前
PyTorch Grid Sample
pytorch·grid sample