You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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。
  • 代入公式计算:
    (4-1)*2 - 2*0 + 4 + 0 = 3*2 + 4 = 10
    
    输出高/宽为10,符合预期形状。

完整生成器输出尺寸分析(Gen_output.shape=(100,1,28,28))

生成器由4个转置卷积块组成,从初始噪声(100,10,1,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)
  2. 第二个块:make_gen_block(256,128,kernel_size=4,stride=1)
    • 输出高/宽:(3-1)*1 - 2*0 + 4 + 0 = 6 → 形状(100,128,6,6)
  3. 第三个块:make_gen_block(128,64),默认参数kernel_size=3,stride=2,padding=0
    • 输出高/宽:(6-1)*2 - 2*0 + 3 + 0 = 13 → 形状(100,64,13,13)
  4. 第四个块: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:04:57