经过 nn.Conv2d(3, 16, 3, 1)
后,张量的形状从 [32, 3, 128, 128]
变为 [32, 16, 126, 126]
。这里详细解释这次卷积操作是如何导致张量形状变化的。
首先,这个卷积层的参数含义如下:
- 输入通道数 (in_channels): 3(对应输入图像的 RGB 通道)。
- 输出通道数 (out_channels): 16(卷积层的滤波器数量)。
- 卷积核大小 (kernel_size): 3(3x3 卷积核)。
- 步幅 (stride): 1(卷积核每次移动的像素数)。
- 填充 (padding): 0(默认值,即不使用填充)。
这里一步步地计算卷积操作后的张量形状变化。
通道数变化
- 输入通道数: 3
- 输出通道数: 16
卷积操作通过 16 个不同的卷积核对输入图像进行操作,生成 16 个不同的特征图。因此,通道数从 3 变为 16。
空间维度变化 (高度和宽度)
计算输出特征图的高度和宽度可以使用以下公式:
- 输入高度和宽度 (Input Size): 128
- 卷积核大小 (Kernel Size): 3
- 填充 (Padding): 0
- 步幅 (Stride): 1
将这些值代入公式:
所以,卷积操作后,特征图的高度和宽度都变为 126。
最终输出张量的形状
- 批次大小 (Batch Size): 32(保持不变)
- 输出通道数 (Output Channels): 16
- 输出高度 (Output Height): 126
- 输出宽度 (Output Width): 126
因此,经过 nn.Conv2d(3, 16, 3, 1)
后,张量的形状从 [32, 3, 128, 128]
变为 [32, 16, 126, 126]
。
最后
- 输入的 32 张 RGB 图像,大小为 128x128 像素。
- 经过 16 个 3x3 的卷积核,步幅为 1,没有填充。
- 生成 16 个特征图,大小为 126x126 像素。
- 最终输出形状为
[32, 16, 126, 126]
。