如何计算卷积层输出图像的大小&以及池化大小输出
卷积
在卷积神经网络(CNN)中,计算卷积层输出图像的大小是一个常见的操作。以下是卷积计算的基本公式和步骤:
-
卷积层输出尺寸计算公式:
Output_size=⌊Input_size−Filter_size+2×PaddingStride⌋+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×33 \times 33×3)。
- Padding\text{Padding}Padding 是填充的像素数。
- Stride\text{Stride}Stride 是卷积核移动的步长。
- ⌊⋅⌋\left\lfloor \cdot \right\rfloor⌊⋅⌋ 表示向下取整。
-
实例:
假设输入图像尺寸为 32×3232 \times 3232×32,卷积核尺寸为 5×55 \times 55×5,填充为 000(即没有填充),步长为 111。
Output_size=⌊32−5+2×01⌋+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×2828 \times 2828×28。 -
带填充和步长的实例:
如果输入图像尺寸为 32×3232 \times 3232×32,卷积核尺寸为 3×33 \times 33×3,填充为 111(即每边填充一圈像素),步长为 222:
Output_size=⌊32−3+2×12⌋+1=⌊322⌋+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×1717 \times 1717×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×55 \times 55×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_sizeStride⌋+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×22 \times 22×2)。
- Stride\text{Stride}Stride 是池化窗口移动的步长。
- ⌊⋅⌋\left\lfloor \cdot \right\rfloor⌊⋅⌋ 表示向下取整。
实例计算
假设我们有一个池化层,输入图像的尺寸为 54×54×9654 \times 54 \times 9654×54×96,池化窗口的尺寸为 2×22 \times 22×2,步长为 2(即常见的最大池化操作)。
-
计算高度和宽度:
Output_height=⌊54−22⌋+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−22⌋+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×9627 \times 27 \times 9627×27×96。
解释
- 输入图像尺寸: 54×54×9654 \times 54 \times 9654×54×96
- 池化窗口尺寸: 2×22 \times 22×2
- 步长: 2
池化操作通过应用 2×22 \times 22×2 的池化窗口,以步长 2 在 54×5454 \times 5454×54 的输入图像上滑动,从而得到一个高度和宽度均为 27,通道数为 96 的输出特征图。
总结
通过上述步骤,我们解释了如何计算池化层输出图像的尺寸。池化后的输出尺寸为 27×27×9627 \times 27 \times 9627×27×96。