DCGAN自定义Generator报ConvTranspose2d output_padding类型错误
错误根因
错误由自定义Generator的**输出层(output_layer内的ConvTranspose2d)**引发,核心是转置卷积的传参顺序错位。nn.ConvTranspose2d的位置参数顺序如下:
in_channels, out_channels, kernel_size, stride, padding, output_padding, groups, bias, dilation...
你在output_layer中定义转置卷积时,将use_bias作为第6个位置参数传入,该位置实际对应的参数是output_padding——这个参数要求接收整数或整数元组,但实际传入的是布尔值,因此触发类型报错。
其余层没有触发同类错误,是因为input_layer和upscale_block中的转置卷积都使用了bias=xxx的关键字传参方式,不会出现位置匹配错位的问题。你之前核对层结构时没发现差异,大概率是只检查了通道数、卷积核尺寸这类数值,没注意参数对应的键名:错位的层打印时会显示output_padding=False,和官方实现的output_padding=0, bias=False有明显区别。
修复方案
修改output_layer中转置卷积的传参方式,给use_bias显式指定参数名bias即可:
def output_layer(self, in_f, out_f, use_bias=True): return nn.Sequential( nn.ConvTranspose2d(in_f, out_f, 4, 2, 1, bias=use_bias), nn.Tanh() )
修改后模型逻辑和官方实现完全对齐,输入形状为(batch_size, nz, 1, 1)的噪声时,可以正常输出形状为(batch_size, 3, 64, 64)的生成图像。
另外你的测试代码里重复写了两次print(gen_model_pytorch),没有打印自定义模型结构,排查问题时可以修正这个笔误。
内容的提问来源于stack exchange,提问作者Saish Reddy
相关产品推荐
相关产品推荐

