PyTorch中ConvTranspose2d的输出维度计算公式是什么?
PyTorch ConvTranspose2d 输出维度计算公式详解
我完全理解你遇到的困惑——ConvTranspose2d的尺寸计算确实和普通Conv2d逻辑相反,刚开始很容易摸不清规律。其实官方文档里明确给出了计算公式,只是需要结合实际例子拆解才能明白,我帮你理清楚:
核心计算公式(无output_padding时)
对于输入宽度为w(高度同理,假设输入是正方形)的特征图,经过nn.ConvTranspose2d后的输出宽度为:
output_w = (w - 1) * stride - 2 * padding + kernel_size
参数解释
w:输入特征图的宽度/高度(你的例子中是5)stride:转置卷积的步长padding:注意!这里的padding不是在输入侧填充,而是在转置卷积生成的初始输出结果上裁剪边缘,所以增大padding会直接减小最终输出尺寸(这就是你发现添加padding反而缩小尺寸的原因)kernel_size:转置卷积核的大小
用你的例子逐一验证
我们用你给出的测试案例代入公式,看看是否完全匹配:
输出11×11的情况
输入w=5,kernel_size=3,stride=2,padding=0output_w = (5-1)*2 - 2*0 +3 = 4*2 +3 = 11和你的测试结果一致。
输出7×7的情况
输入w=5,kernel_size=3,stride=2,padding=2output_w = (5-1)*2 -2*2 +3 = 8 -4 +3 =7这里padding=2意味着从初始输出的上下左右各裁剪2个像素,所以尺寸大幅缩小,完全符合你的观察。
输出13×13的情况
输入w=5,kernel_size=5,stride=2,padding=0output_w = (5-1)*2 -0 +5 =8+5=13和测试结果一致。
输出15×15的情况
输入w=5,kernel_size=3,stride=3,padding=0output_w = (5-1)*3 -0 +3=12+3=15完全匹配你的测试结果。
补充:带output_padding的情况
如果你的代码中用到了output_padding参数(用来解决stride>1时的尺寸歧义),公式需要调整为:
output_w = (w -1)*stride -2*padding + kernel_size + output_padding
output_padding的取值范围通常是0到stride-1之间,用来微调输出尺寸,一般默认是0。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

