计算卷积神经网络中输出特征图尺寸的关键公式

在设计卷积神经网络(CNN)时,准确计算每个卷积层的输出特征图尺寸是至关重要的。这不仅关系到网络的结构设计,也直接影响参数优化和整体性能。适当的计算可以确保网络层正确连接,避免资源浪费,并优化性能。以下内容提供了详细的参数说明和计算过程,包括如何从期望的输出特征图尺寸反向推导所需的padding量。

核心公式及参数详解

卷积层的输出特征图尺寸 (H_{out}) 和 (W_{out}) 通常通过以下公式计算:

对于输出高度 ( HoutH_{out}Hout ):
[ Hout=⌊Hin+2×padding[0]−dilation[0]×(kernel_size[0]−1)−1stride[0]+1⌋H_{out} = \left\lfloor \frac{H_{in} + 2 \times padding[0] - dilation[0] \times (kernel\_size[0] - 1) - 1}{stride[0]} + 1 \right\rfloorHout=stride[0]Hin+2×padding[0]dilation[0]×(kernel_size[0]1)1+1 ]

对于输出宽度 ( $W_{out} $):
[ $W_{out} = \left\lfloor \frac{W_{in} + 2 \times padding[1] - dilation[1] \times (kernel_size[1] - 1) - 1}{stride[1]} + 1 \right\rfloor $]

参数详解
  • (HinH_{in}Hin), (WinW_{in}Win):分别代表输入特征图的高度和宽度。
  • (padding[0]padding[0]padding[0]), (padding[1]padding[1]padding[1]):分别在高度和宽度方向上的padding值,用于调整输入尺寸以适应特定的输出需求或操作边界条件。
  • (dilation[0]dilation[0]dilation[0]), (dilation[1]dilation[1]dilation[1]):在高度和宽度方向上的扩张率。扩张卷积通过在卷积核元素之间插入“空格”,增加其感受野,使得卷积核能覆盖更大的区域,而不增加额外的参数。
  • (kernel_size[0]kernel\_size[0]kernel_size[0]), (kernel_size[1]kernel\_size[1]kernel_size[1]):卷积核在高度和宽度方向上的尺寸,影响感受野的大小和参数数量。
  • (stride[0]stride[0]stride[0]), (stride[1]stride[1]stride[1]):步长定义了卷积核在输入特征图上移动时的间距,直接影响输出特征图的尺寸。

反向推导Padding

已知输入尺寸、卷积核尺寸、步长、扩张率以及目标输出尺寸时,可以通过以下方式计算所需的padding:

对于高度方向的padding ( padding[0]padding[0]padding[0] ):
[ padding[0]=((Hout−1)×stride[0]+dilation[0]×(kernel_size[0]−1)+1−Hin)/2padding[0] = \left(\left(H_{out} - 1\right) \times stride[0] + dilation[0] \times (kernel\_size[0] - 1) + 1 - H_{in}\right) / 2padding[0]=((Hout1)×stride[0]+dilation[0]×(kernel_size[0]1)+1Hin)/2 ]

对于宽度方向的padding ( padding[1]padding[1]padding[1] ):
[ padding[1]=((Wout−1)×stride[1]+dilation[1]×(kernel_size[1]−1)+1−Win)/2padding[1] = \left(\left(W_{out} - 1\right) \times stride[1] + dilation[1] \times (kernel\_size[1] - 1) + 1 - W_{in}\right) / 2padding[1]=((Wout1)×stride[1]+dilation[1]×(kernel_size[1]1)+1Win)/2 ]

这些公式允许从期望的输出尺寸反向计算出必要的padding值,以确保输出尺寸符合设计规范。

示例

考虑一个输入特征图尺寸 (Hin=32H_{in} = 32Hin=32), (Win=32W_{in} = 32Win=32),使用 (3×33 \times 33×3) 的卷积核,步长 (1×11 \times 11×1),无扩张(dilation为1dilation为1dilation1),并需输出特征图尺寸也为 (32×3232 \times 3232×32) 的情况。

根据公式计算所需的padding:

[ padding[0]=((32−1)×1+1×(3−1)+1−32)/2=1padding[0] = \left(\left(32 - 1\right) \times 1 + 1 \times (3 - 1) + 1 - 32\right) / 2 = 1padding[0]=((321)×1+1×(31)+132)/2=1 ]

[ padding[1]=((32−1)×1+1×(3−1)+1−32)/2=1padding[1] = \left(\left(32 - 1\right) \times 1 + 1 \times (3 - 1) + 1 - 32\right) / 2 = 1padding[1]=((321)×1+1×(31)+132)/2=1 ]

这表明,为保持输出特征图的尺寸不变,每个方向需要添加 (1×11 \times 11×1) 的padding。

结论

通过准确应用和反向推导公式,可以精确控制CNN中的层输出尺寸,优化网络设计,确保达到预定的性能目标。这种方法不仅节省了调试时间,还提高了网络设计的效率和可预测性。

Logo

一站式 AI 云服务平台

更多推荐