关于GAN生成器输出尺寸计算逻辑的困惑求解
PyTorch GAN生成器尺寸计算详解(MNIST测试模块)
核心公式:ConvTranspose2d输出尺寸计算
PyTorch中转置卷积nn.ConvTranspose2d的输出特征图高/宽计算公式为:
output_size = (input_size - 1) * stride - 2 * padding + kernel_size + output_padding
你的代码中make_gen_block函数固定设置了output_padding=padding,这是计算时必须注意的关键参数。
测试模块尺寸分析
1. hidden_output.shape=(100,20,4,4)
- 输入:
test_uns_noise是将(100,10)的噪声张量通过unsqueeze_noise扩展为**(100,10,1,1)**(batch, channel, height, width)。 - 生成块参数:
kernel_size=4,stride=1,padding=0,output_padding=0。 - 代入公式计算输出高/宽:
输出形状与打印结果一致。(1-1)*1 - 2*0 + 4 + 0 = 4
2. test_hidden_block_stride(hidden_output).shape=(100,20,10,10)
- 输入尺寸:特征图高/宽为4。
- 生成块参数:
kernel_size=4,stride=2,padding=0,output_padding=0。 - 代入公式计算:
输出高/宽为10,符合预期形状。(4-1)*2 - 2*0 + 4 + 0 = 3*2 + 4 = 10
完整生成器输出尺寸分析(Gen_output.shape=(100,1,28,28))
生成器由4个转置卷积块组成,从初始噪声(100,10,1,1)逐步计算:
- 第一个块:
make_gen_block(10,256),默认参数kernel_size=3,stride=2,padding=0- 输出高/宽:
(1-1)*2 - 2*0 + 3 + 0 = 3→ 形状(100,256,3,3)
- 输出高/宽:
- 第二个块:
make_gen_block(256,128,kernel_size=4,stride=1)- 输出高/宽:
(3-1)*1 - 2*0 + 4 + 0 = 6→ 形状(100,128,6,6)
- 输出高/宽:
- 第三个块:
make_gen_block(128,64),默认参数kernel_size=3,stride=2,padding=0- 输出高/宽:
(6-1)*2 - 2*0 + 3 + 0 = 13→ 形状(100,64,13,13)
- 输出高/宽:
- 第四个块:
make_gen_block(64,1,kernel_size=4,final_layer=True)- 输出高/宽:
(13-1)*2 - 2*0 + 4 + 0 = 28→ 形状(100,1,28,28)
- 输出高/宽:
最终输出正好匹配MNIST数据集的28×28图像尺寸。
内容的提问来源于stack exchange,提问作者sifat karim
相关产品推荐
相关产品推荐

