CNN(Convolutional Neural Networks,卷积神经网络),CNN在图像、提取空间信息中有着广泛的应用,CNN通常包含以下几种神经层:

一般通过堆叠上述神经层组成CNN网络,在本文中将以清晰的示例说明如何计算不同神经层的输出参数大小。

本文将以最简单的猫狗图片分类作为说明示例,假设有一张有RGB 3个颜色通道,宽32,高32的图片,我们通过将其输入到CNN中对该图片进行分类,判断是猫还是狗。

1 卷积层的输出

卷积层是构成CNN网络的核心,其基本上完成了大量繁重的计算工作。一般有以下参数影响卷积层的输出:

  • filter num:卷积核的数量
  • filter size:卷积核的大小
  • stride:卷积的步长
  • padding:卷积的填充

对于卷积层的计算,假设卷积层输入为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过卷积核数量为K,卷积核大小为F,卷积步长为S,卷积填充为P的卷积层,则该卷积层的输出为,

在没有padding的情况下

\begin{array}{c}
W_{output} = \frac{W_{input}-F}{S} + 1\\
H_{output} = \frac{H_{input}-F}{S} + 1\\
D_{output} = K
\end{array}

在有padding的情况下

\begin{array}{c}
W_{output} = \frac{W_{input}-F+2P}{S} + 1\\
H_{output} = \frac{H_{input}-F+2P}{S} + 1\\
D_{output} = K
\end{array}

假设CNN输入图片的维度为3\times 32\times 32,其中通道数为3,宽为32,高为32,假设CNN第一个卷积层卷积核数量为10,卷积核大小为3\times 3,卷积步长为2,卷积填充为0,则该卷积层输出大小

\begin{array}{c}
W = \frac{32-3+0}{2} + 1 = 15\\
H = \frac{32-3+0}{2} + 1 = 15\\
D = 10
\end{array}
深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算-StubbornHuang Blog

2 池化层的输出

增加池化层的目的主要是下采样(downsamples)。
在CNN中,在连续的卷积层中增加一个池化层可以逐渐减小表示的空间大小,从而减少网络中参数数量和计算量,并且能够在一定程度上防止过拟合。

最常见的池化层规模为2 \times 2,在输入的每个深度切片沿宽度和高度进行下采样。

在进行池化时,通常不使用任何填充,所以padding通常为0。

对于池化层的计算,假设输入层为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过过滤器数量为K,池化大小为F,步长为S的池化层,则该池化层的输出为,

\begin{array}{c}
W_{output} = \frac{W_{input}-F}{S} + 1\\
H_{output} = \frac{H_{input}-F}{S} + 1\\
D_{output} = K
\end{array}

假设输入为15\times 15\times 10,使用过滤器数量为10,池化大小为2 \times 2,步长为2的池化层进行池化处理,则输出的大小为

\begin{array}{c}
W = \frac{15-2}{2} + 1 = 7\\
H = \frac{15-2}{2} + 1 = 7\\
D = 10
\end{array}
深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算-StubbornHuang Blog

3 全连接层的输出

全连接层主要是将输入的tensor进行展平。

对于全连接层的计算,假设输入层为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过全连接层的输出为

\begin{array}{c}
outputsize = W_{input}\times H_{input}\times D_{input}
\end{array}

假设输入为7\times 7\times 10,则输出为

\begin{array}{c}
outputsize = 7 \times 7\times 10 = 490
\end{array}
深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算-StubbornHuang Blog

在经过全连接层处理之后,490个数字可以组成一个长向量,然后将其输入到Softmax中对分类进行预测。

参考链接