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为例:
只能看到基础信息,并不能看到每一层的详细信息:如shape、或者参数量大小等等
2、使用torchinfo可视化网络结构
torchinfo:主要使用torchinfo.summary()
,必需的参数分别是model,input_size[batch_size,channel,h,w],documentation 借助torchinfo,可以看到更加详细的信息,包括模块信息(每一层的类型、输出shape和参数量)、模型整体的参数量、模型大小、一次前向或者反向传播需要的内存大小等
注意:
当使用colab或者jupyter notebook时,想要实现该方法,summary()
一定是该单元(即notebook中的cell)的返回值,否则我们就需要使用print(summary(...))
来可视化。
二、CNN卷积层可视化
1 可视化卷积核
在PyTorch中可视化卷积核的核心——特定层的卷积核即特定层的模型权重。可视化卷积核就等价于可视化对应的权重矩阵。下面给出在PyTorch中可视化卷积核的实现方案,以torchvision自带的VGG11模型为例:
加载模型
卷积核对应的应为卷积层(Conv2d),这里以第“3”层为例,可视化对应的参数:
由于第“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的配置与启动
在安装包中 此部分稍后补齐