对于我们刚刚接触神经网络的初学者来说,它是非常神奇的一个存在:我们将特征进行输入,数据流经网络,进行一番操作后就输出了结果。所谓训练神经网络的过程,就是通过梯度下降不断修改网络内部的参数,从而使得输出结果越来越精确。在写好的程序中,构建神经网络模型完成后就把它封装起来了,并且前向传播(forward)、反向传播(backward)都是自动计算的。因此,神经网络对于使用者而言,更像是一个“黑箱”,我们不知道数据输入黑箱后发生了什么,只知道这个黑箱可以给出我们想要的结果。
在炼丹的学习过程中,很容易就变成调包侠,所以要自己多动手去搭建一些网络模型——就相当于把黑箱给拆开来,去了解每一部分的原理;那么Pytorch可视化,相当于把一个连续的训练过程一步步拆解开来,去了解数据每一步的变化,这有助于我们去调试模型、优化超参数。
首先来看一看经典卷积网络中卷积核的可视化。
一个卷积神经网络显著的结构特征就是随着卷积的深入,通道数增加。在一个卷积层中,为了实现通道增加,就需要多个卷积核进行配合(后一层网络的通道数=前一层卷积的卷积核个数)。个人是这样理解的:通过添加多个卷积核,可以在每个卷积核上有不同的参数设置,这样就可以从不同特征维度对图像的特征进行提取了。
例如在前面的FashionMNST分类模型中,模型基本结构如下:
直接print(model)就可以看到模型的基本结构:三层的卷积以及两个全连接
当然看这种基本的网络结构还可以同torchinfo这个包,可以得到更细致的节点信息:
from torchinfo import summary
summary(model,(1,1,28,28))#图片数量1,通道数1,图片尺寸28*28
可以说是很详细了
以上操作相当于是把黑箱给拆开观察其内部结构。针对具体结构的某一部分(比如卷积核),同样可以通过可视化的方法来看一看卷积核具体长啥样(conv部分的第一次卷积):
print(model.conv[0])