神经网络各层的作用

卷积层(conv):用于特征的提取

池化层(pooling):对特征图进行压缩,一方面减小特征图的大小,另一方面进行特征压缩,提取主要特征

激活函数:加入非线性因素的,因为线性模型的表达能力不够

全连接层(full connected layer):分类器的作用,用于把前面提取的特征综合起来。

卷积层尺寸的计算原理

alt

输入矩阵的格式一般为四维:样本数,图像高度,图像宽度,图像通道数。在pytorch中,通道数一般在图像高度和图像宽度前面。

输出矩阵的维度顺序与前面一致,样本数不发生变化,但图像高度、图像宽度、图像通道数会发生变化。

权重矩阵(卷积核)的格式:卷积核高度、卷积核宽度、输入通道数、输出通道数。

三者的关系:

卷积核的通道数是由输入矩阵的通道数决定(卷积核的通道数 = 输入矩阵的通道数)。

输出矩阵的通道数由卷积核的数量决定(输出矩阵通道数 = 卷积核的数量)。

图像高度、宽度变化关系:

hout=hinhkernel+2paddingstride+1h_{out}=\frac{h_{in}-h_{kernel}+2\cdot padding}{stride}+1

宽度变化与高度变化一致,故省略。

卷积计算

以AlexNet为例:

输入图片的尺寸为227×227×3227\times 227\times 3

卷积核的数目为96个,

每个卷积核的大小为11×11×311\times 11\times 3

已知stride=4,padding=0。

则输出的高度和宽度为:(22711+2×0)/4+1=55(227-11+2\times 0)/4+1=55,高度为卷积核的数量,即96。 alt

特殊例子

1×11\times 1的卷积核:将输入矩阵的通道数量缩减,但宽度高度保持不变。

alt

全连接层:全连接层可以被视为极端的卷积层,其卷积核尺寸就是输入矩阵的尺寸,因此输出的高度和宽度都为1。

alt

可以看出,卷积层会从高度、宽度、深度三个维度来改变像素输入的维度。特别是深度的改变,是由卷积核的数量决定的。

而对于池化层,它只会在高度和宽度上对像素矩阵进行改变,深度方面并没有变化。

参考链接

[1] CNN中卷积层的计算细节 - 知乎 (zhihu.com)