深入浅出PytorchTask05打卡

  1. 网络结构的可视化
    可以使用print的方式进行网络的可视化,但是看不出每一层的具体信息:
    image
    输出的结果为:
    image

成功的安装了torchinfo函数之后,可以进行更为精细的信息可视化


并在pycharm中输入此代码:

可以得到更为精细的信息,包括模块信息(每一层的类型、输出shape和参数量)、模型整体的参数量、模型大小、一次前向或者反向传播需要的内存大小等等信息。
这样就可以根据参数量和通道数等信息对每一层做出修改和判断等等。

  1. CNN可视化
    CNN是包括卷积层(卷积核、特征图),卷积操作完成后,结果会被放入不同的channel中。
    同时CNN在分类中有个很重要的点,需要进行特征激活图的可视化,也就是可视化哪个变量对结果的影响更大,哪个更小。
    首先看一下卷积层,因为只有卷积层才有卷积核的概念:
    image
    得到结果:

然后我们以第三层为例,查看一下卷积层里面的具体信息


以上的代码,对卷积核中的weight进行可视化,我们只展示其中的一张图,可以看出如下:
image
该图用红蓝来表示卷积核中模型的参数情况。

卷积核操作结束之后,就可以可视化特征图:
image
pytorch提供了一个专用的可以在网络前向传播过程中能获取特征图的接口-hook。就是数据通过网络向前传播,网络某一层我们预先设置了一个钩子,数据传播过后钩子上会留下数据在这一层的样子,读取钩子的信息就是这一层的特征图
上图中,module_name是这一层的名字
Features_in_hook是这一层的输入的信息
Out_hook是这一层输出的信息

得到输出结果:
image
image
这里我们首先实现了一个hook类,之后在plot_feature函数中,将该hook类的对象注册到要进行可视化的网络的某层中。model在进行前向传播的时候会调用hook的__call__函数,我们也就是在那里存储了当前层的输入和输出。这里的features_out_hook 是一个list,每次前向传播一次,都是调用一次,也就是features_out_hook 长度会增加1。

浙ICP备19012682号