卷积层输出尺寸的计算公式
对于二维卷积层(nn.Conv2d
),输出特征图的高度和宽度可以通过以下公式计算:
[
H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2 \times \text{padding} - \text{dilation} \times (\text{kernel_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor
]
[
W_{\text{out}} = \left\lfloor \frac{W_{\text{in}} + 2 \times \text{padding} - \text{dilation} \times (\text{kernel_size} - 1) - 1}{\text{stride}} + 1 \right\rfloor
]
参数解释
示例计算
假设我们有一个输入张量 input
,其尺寸为 (64, 1, 32, 32)
,并且我们使用了以下卷积层配置:
self.conv1 = nn.Conv2d(
in_channels=1,
out_channels=32,
kernel_size=3,
padding=0,
stride=1,
)
我们可以根据上述公式计算 conv1
的输出尺寸:
- 输入尺寸:( H_{\text{in}} = 32 ),( W_{\text{in}} = 32 )
- 卷积核大小:( \text{kernel_size} = 3 )
- 填充:( \text{padding} = 0 )
- 步幅:( \text{stride} = 1 )
- 膨胀系数:( \text{dilation} = 1 )(默认值)
代入公式:
因此,conv1
的输出尺寸为 (batch_size, 32, 30, 30)
。
池化层的输出尺寸
如果你在卷积层后添加了池化层(例如 nn.MaxPool2d
),你可以使用类似的公式来计算池化后的输出尺寸。假设你使用了一个 kernel_size=2
和 stride=2
的最大池化层:
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
代入公式:
因此,pool1
的输出尺寸为 (batch_size, 32, 15, 15)
。