【研究生学习】Pytorch基本知识——卷积神经网络原理与参数
本博客主要记录一下神经网络中卷积神经网络的原理与参数,参考的资料链接如下:
转置卷积的填充和步长
一文弄懂转置卷积原理
卷积神经网络的整体架构,如下图所示:
- 输入层
- 卷积层
- 池化层
- 全连接层
卷积
卷积实际上是对图像的不同区域进行特征提取,一般认为输入图像的维度为H×W×C,如下图所示:
图像具有颜色通道,一般是RGB,需要理解的是不同通道数的图像和不同的通道数的滤波器如何计算得到结果,通过下面的图比较直观的理解:
可见图像中的通道数C与滤波器中的通道数要保持一致
同时需要进行滑动来计算下一个值:
可见卷积层中设计的参数如下:
- 滑动窗口步长
- 卷积核尺寸
- 边缘填充
- 卷积核个数
步长与卷积核大小对结果的影响
在卷积神经网络中往往需要进行多次卷积,如下图所示:
堆叠的卷积层可以用下图中的例子来理解其维度的变化:
步长也会影响输出的结果,如下图所示:
边缘填充方法
边缘填充一定程度上弥补了边界信息缺失的问题
特征图尺寸计算与参数共享
卷积结果计算公式:
长度:$ H_2=\frac{H_1-F_H+2P}{S}+1 $
宽度:$ W_2=\frac{W_1-F_W+2P}{S}+1 $
其中W1、H1表示输入的宽度、长度,W2、H2表示输出特征图的宽度、长度,F表示卷积核长和宽的大小,S表示滑动窗口的步长,P表示边界填充
图像的底层特征是跟具体位置无关的,故对于主要用于提取底层特征的前几层网络,每一个位置选用相同的卷积核,在这种思想下,可以通过下面的例子体会一下卷积神经网络中有多少参数:
- 数据是32323的图像,用10个553的filter进行卷积操作,所需的权重参数为:553*10=750,同时还有b参数,每个卷积核都有一个对应的偏置参数,故最终需要750+10=760个参数
池化
池化的操作说明如下图所示:
上图中的池化是最大池化,即Max Pooling
感受野的作用
感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的
通过下图中的例子可以理解这一点:
绿色标记的是Layer2每个神经元看到的区域,黄色标记的是Layer3看到的区域,具体地,Layer2每个神经元可看到Layer1上3×3大小的区域,Layer3每个神经元看到Layer2上3×3大小的区域,该区域可以又看到Layer1上5×5大小的区域
如果堆叠3个33的卷积层,并且保持滑动窗口步长为1,其感受野就是77了,这跟使用一个7*7卷积核的结果是一样的,那为什么非要堆叠三个小卷积呢?
假设输入大小都是H×W×C,并且都使用C个卷积核(得到C个特征图),可以计算一下其各自所需参数:
-
一个7*7卷积核:$ C×(7×7×C)=49C^2 $
-
3个3*3卷积核:$ 3×C×(3×3×C)=27C^2 $
可见堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随着增多,还不会增大权重参数个数,这也是VGG网络的基本出发点,用小的卷积核来完成特征提取操作
经典卷积神经网络架构
Alexnet:
Vgg:
Vgg中所有的卷积核大小都是3*3的,上图中框起来的是常用的版本