当前位置: 首页 > news >正文

第十九章 解读利用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 文件通过之前的训练获得

img

二、操作步骤

AlexNet 的中间层特征矩阵

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

img

  1. 打印两个层结构:第一个是features,第二个是classifier,与 alexnet_model.py文件中的所定义的层结构一一对应,如下图所示:

img

img

  1. 在 alexnet_model.py 文件的 for name, module in self.features.named_children(): 行设置断点并单步运行img

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

img

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

img

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

img

5.让程序执行完

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

img

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

原图如下:

img

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

img

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

img

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

img

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

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

resnet34 的中间层特征矩阵

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

img

img

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

img

2.运行结果如图

img

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

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

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

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

img

AlexNet 的卷积核参数

  1. 打开 analyze_kernel_weight.py 文件

img

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

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

img

单步运行看一下weights_keys

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

命名规则:

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

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

img

3.接下来遍历 weights_keys

img

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

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

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

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

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

  1. 获得信息
    # 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()        #最大值

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

img

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

img

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

ResNet 的卷积核参数

1.第一个卷积层的分布

img

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

img

weight就是下图的 \LARGE \gamma 参数

img

bias对应上图的 \LARGE \beta 参数

img

img

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

img

方差 \LARGE \sigma ^{2} 也是统计得到的

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

相关文章:

  • Jmeter全流程性能测试实战
  • Javascript每天一道算法题(十八)——矩阵置零-中等
  • 2023年微软开源八个人工智能项目
  • linux 开发板以太网通过Ubuntu上外网方法
  • 从书籍结构体中查找定价最高的书籍
  • 一、TIDB基础
  • 个体卫生室电子处方操作流程,私人诊所用什么电子处方系统软件,佳易王诊所电子处方软件配方模板如何设置
  • redis的高可用
  • 浅谈电力设备智能无线温度检测系统
  • 中职网安-Linux操作系统渗透测-Server2130(环境加qq)
  • 计网(复习自用)
  • 【教学类-06-09】20231125 (55格版)X-Y之间“加法减法+-题” (以10-20之间为例)(加法的正序+逆序,减法的正序,题目多)
  • Oracle SQL 注入上的 Django GIS 函数和聚合漏洞 (CVE-2020-9402)
  • 【深度学习】学习率及多种选择策略
  • facebook如何群发小组贴
  • 【刷算法】求1+2+3+...+n
  • 0基础学习移动端适配
  • Akka系列(七):Actor持久化之Akka persistence
  • JavaScript 一些 DOM 的知识点
  • Js基础知识(一) - 变量
  • leetcode98. Validate Binary Search Tree
  • Odoo domain写法及运用
  • Python 基础起步 (十) 什么叫函数?
  • Spark学习笔记之相关记录
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue中实现单选
  • WePY 在小程序性能调优上做出的探究
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​低代码平台的核心价值与优势
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #QT(一种朴素的计算器实现方法)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #考研#计算机文化知识1(局域网及网络互联)
  • $.ajax()参数及用法
  • (52)只出现一次的数字III
  • (HAL库版)freeRTOS移植STMF103
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (理论篇)httpmoudle和httphandler一览
  • (六)Hibernate的二级缓存
  • (算法设计与分析)第一章算法概述-习题
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • *1 计算机基础和操作系统基础及几大协议
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net的socket示例
  • .NET开源快速、强大、免费的电子表格组件
  • /proc/vmstat 详解