task07

  • 一、可视化网络结构
  • 1、使用print函数打印模型基础信息
  • 2、使用torchinfo可视化网络结构
  • 二、CNN卷积层可视化
  • 1 可视化卷积核
  • 2、可视化CNN特征图的方法
  • 3 CNN class activation map可视化方法
  • 三、使用Tensorboard可视化训练过程
  • 1 TensorBoard可视化的基本逻辑
  • 2 TensorBoard的配置与启动


一、可视化网络结构

背景:深度神经网络的结构越来越复杂,因此很难确定每一层的输入结构、输出结构以及参数信息。因此需要一个类比Keras中model.summary()的可用来可视化网络结构的工具,调用后可显示模型参数、输入和输出的大小、模型的整体参数。
torchinfo:是由torchsummary和torchsummaryX重构出的库。

1、使用print函数打印模型基础信息

以ResNet18为例:

pytorch打印pth pytorch打印网络_损失函数


只能看到基础信息,并不能看到每一层的详细信息:如shape、或者参数量大小等等

2、使用torchinfo可视化网络结构

torchinfo:主要使用torchinfo.summary(),必需的参数分别是model,input_size[batch_size,channel,h,w],documentation 借助torchinfo,可以看到更加详细的信息,包括模块信息(每一层的类型、输出shape和参数量)、模型整体的参数量、模型大小、一次前向或者反向传播需要的内存大小等

pytorch打印pth pytorch打印网络_卷积核_02


注意

当使用colab或者jupyter notebook时,想要实现该方法,summary()一定是该单元(即notebook中的cell)的返回值,否则我们就需要使用print(summary(...))来可视化。

二、CNN卷积层可视化

1 可视化卷积核

在PyTorch中可视化卷积核的核心——特定层的卷积核即特定层的模型权重。可视化卷积核就等价于可视化对应的权重矩阵。下面给出在PyTorch中可视化卷积核的实现方案,以torchvision自带的VGG11模型为例:

加载模型

pytorch打印pth pytorch打印网络_卷积_03


pytorch打印pth pytorch打印网络_卷积_04


卷积核对应的应为卷积层(Conv2d),这里以第“3”层为例,可视化对应的参数:

pytorch打印pth pytorch打印网络_损失函数_05


由于第“3”层的特征图由64维变为128维,因此共有128*64个卷积核,其中部分卷积核可视化效果如下图所示

2、可视化CNN特征图的方法

与卷积核相对应,输入的原始图像经过每次卷积层得到的数据称为特征图,可视化卷积核是为了看模型提取哪些特征,可视化特征图则是为了看模型提取到的特征是什么样子的。

获取特征图的方法有很多种,

  • (1)从输入开始,逐层做前向传播,直到想要的特征图处将其返回。
  • (2)hook:专门用来使得网络在前向传播过程中能够获取到特征图的接口。
    可以想象这样的场景,数据通过网络向前传播,网络某一层我们预先设置了一个钩子,数据传播过后钩子上会留下数据在这一层的样子,读取钩子的信息就是这一层的特征图。
    实现流程:首先实现了一个hook类,之后在plot_feature函数中,将该hook类的对象注册到要进行可视化的网络的某层中。model在进行前向传播的时候会调用hook的__call__函数,我们也就是在那里存储了当前层的输入和输出。这里的features_out_hook 是一个list,每次前向传播一次,都是调用一次,也就是features_out_hook 长度会增加1

3 CNN class activation map可视化方法

相比可视化卷积核与可视化特征图,CAM系列可视化更为直观,能够一目了然地确定重要区域,进而进行可解释性分析或模型优化改进。
CAM系列操作的实现可以通过开源工具包pytorch-grad-cam来实现.
详细见ipynp文件

三、使用Tensorboard可视化训练过程

一般来说,我们会结合训练集的损失函数和验证集的损失函数,绘制两条损失函数的曲线来确定训练的终点,找到对应的模型用于测试。

1 TensorBoard可视化的基本逻辑

特点:

  • 记录模型的每一层feature map、权重、loss等,并保存在指定的文件夹。
  • 随着程序运行不断记录,
  • 可通过网络形式可视化。

2 TensorBoard的配置与启动

在安装包中 此部分稍后补齐