如何计算卷积层输出图像的大小&以及池化大小输出
卷积
在卷积神经网络(CNN)中,计算卷积层输出图像的大小是一个常见的操作。以下是卷积计算的基本公式和步骤:
-
卷积层输出尺寸计算公式:
Output_size = ⌊ Input_size − Filter_size + 2 × Padding Stride ⌋ + 1 \text{Output\_size} = \left\lfloor \frac{\text{Input\_size} - \text{Filter\_size} + 2 \times \text{Padding}}{\text{Stride}} \right\rfloor + 1 Output_size=⌊StrideInput_size−Filter_size+2×Padding⌋+1其中:
- Input_size \text{Input\_size} Input_size 是输入图像的尺寸(高度或宽度)。
- Filter_size \text{Filter\_size} Filter_size 是卷积核的尺寸(通常是正方形,如 3 × 3 3 \times 3 3×3)。
- Padding \text{Padding} Padding 是填充的像素数。
- Stride \text{Stride} Stride 是卷积核移动的步长。
- ⌊ ⋅ ⌋ \left\lfloor \cdot \right\rfloor ⌊⋅⌋ 表示向下取整。
-
实例:
假设输入图像尺寸为 32 × 32 32 \times 32 32×32,卷积核尺寸为 5 × 5 5 \times 5 5×5,填充为 0 0 0(即没有填充),步长为 1 1 1。
Output_size = ⌊ 32 − 5 + 2 × 0 1 ⌋ + 1 = ⌊ 27 ⌋ + 1 = 28 \text{Output\_size} = \left\lfloor \frac{32 - 5 + 2 \times 0}{1} \right\rfloor + 1 = \left\lfloor 27 \right\rfloor + 1 = 28 Output_size=⌊132−5+2×0⌋+1=⌊27⌋+1=28
因此,输出图像的尺寸为 28 × 28 28 \times 28 28×28。 -
带填充和步长的实例:
如果输入图像尺寸为 32 × 32 32 \times 32 32×32,卷积核尺寸为 3 × 3 3 \times 3 3×3,填充为 1 1 1(即每边填充一圈像素),步长为 2 2 2:
Output_size = ⌊ 32 − 3 + 2 × 1 2 ⌋ + 1 = ⌊ 32 2 ⌋ + 1 = 16 + 1 = 17 \text{Output\_size} = \left\lfloor \frac{32 - 3 + 2 \times 1}{2} \right\rfloor + 1 = \left\lfloor \frac{32}{2} \right\rfloor + 1 = 16 + 1 = 17 Output_size=⌊232−3+2×1⌋+1=⌊232⌋+1=16+1=17
因此,输出图像的尺寸为 17 × 17 17 \times 17 17×17。 -
卷积层的参数个数:
计算卷积层的参数个数的公式为:
Params = ( Filter_height × Filter_width × Input_channels + 1 ) × Number_of_filters \text{Params} = (\text{Filter\_height} \times \text{Filter\_width} \times \text{Input\_channels} + 1) \times \text{Number\_of\_filters} Params=(Filter_height×Filter_width×Input_channels+1)×Number_of_filters例如,对于一个具有 3 个输入通道、32 个过滤器和 5 × 5 5 \times 5 5×5 卷积核的卷积层:
Params = ( 5 × 5 × 3 + 1 ) × 32 = ( 75 + 1 ) × 32 = 2432 \text{Params} = (5 \times 5 \times 3 + 1) \times 32 = (75 + 1) \times 32 = 2432 Params=(5×5×3+1)×32=(75+1)×32=2432
通过这些公式和实例,你可以计算任何卷积层的输出尺寸和参数个数。
池化
池化(Pooling)操作通常用于减小特征图的尺寸,同时保留重要的特征。计算池化层输出图像的大小的方法类似于卷积层,但公式略有不同。
池化层输出尺寸计算公式
Output_size = ⌊ Input_size − Pool_size Stride ⌋ + 1 \text{Output\_size} = \left\lfloor \frac{\text{Input\_size} - \text{Pool\_size}}{\text{Stride}} \right\rfloor + 1 Output_size=⌊StrideInput_size−Pool_size⌋+1
其中:
- Input_size \text{Input\_size} Input_size 是输入图像的尺寸(高度或宽度)。
- Pool_size \text{Pool\_size} Pool_size 是池化窗口的尺寸(通常是正方形,如 2 × 2 2 \times 2 2×2)。
- Stride \text{Stride} Stride 是池化窗口移动的步长。
- ⌊ ⋅ ⌋ \left\lfloor \cdot \right\rfloor ⌊⋅⌋ 表示向下取整。
实例计算
假设我们有一个池化层,输入图像的尺寸为 54 × 54 × 96 54 \times 54 \times 96 54×54×96,池化窗口的尺寸为 2 × 2 2 \times 2 2×2,步长为 2(即常见的最大池化操作)。
-
计算高度和宽度:
Output_height = ⌊ 54 − 2 2 ⌋ + 1 = ⌊ 26 ⌋ + 1 = 27 \text{Output\_height} = \left\lfloor \frac{54 - 2}{2} \right\rfloor + 1 = \left\lfloor 26 \right\rfloor + 1 = 27 Output_height=⌊254−2⌋+1=⌊26⌋+1=27Output_width = ⌊ 54 − 2 2 ⌋ + 1 = ⌊ 26 ⌋ + 1 = 27 \text{Output\_width} = \left\lfloor \frac{54 - 2}{2} \right\rfloor + 1 = \left\lfloor 26 \right\rfloor + 1 = 27 Output_width=⌊254−2⌋+1=⌊26⌋+1=27
因此,输出图像的高度和宽度均为 27。
- 输出通道数:
池化操作不改变通道数。因此,输出图像的通道数仍然是 96。
最终输出尺寸
结合上面的计算,池化后的输出图像的尺寸为 27 × 27 × 96 27 \times 27 \times 96 27×27×96。
解释
- 输入图像尺寸: 54 × 54 × 96 54 \times 54 \times 96 54×54×96
- 池化窗口尺寸: 2 × 2 2 \times 2 2×2
- 步长: 2
池化操作通过应用 2 × 2 2 \times 2 2×2 的池化窗口,以步长 2 在 54 × 54 54 \times 54 54×54 的输入图像上滑动,从而得到一个高度和宽度均为 27,通道数为 96 的输出特征图。
总结
通过上述步骤,我们解释了如何计算池化层输出图像的尺寸。池化后的输出尺寸为 27 × 27 × 96 27 \times 27 \times 96 27×27×96。