能否在nn.Sequential中集成自定义函数?我的CGAN实现方式是否正确?
你的实现方式是正确的
你的代码完全符合PyTorch的规范,可以将自定义的循环填充模块集成到nn.Sequential中,原因如下:
nn.Sequential要求序列中的每个元素必须是继承自nn.Module的类实例,你的pad_dim_x类继承了nn.Module且实现了forward方法,满足这个核心要求。- 你通过
torch.cat实现的循环填充逻辑是合理的,能够正确完成环形边缘填充的需求,适配后续的转置卷积操作。
一些优化建议
为了让代码更符合PyTorch模块的设计习惯,你可以把填充参数和逻辑整合到类内部,让模块更灵活:
class CircularPad2d(nn.Module): def __init__(self, padding=1): super().__init__() self.padding = padding def forward(self, x): # 对宽度维度(最后一维)做循环填充 x = torch.cat((x[..., -self.padding:], x, x[..., :self.padding]), dim=-1) # 对高度维度(倒数第二维)做循环填充 x = torch.cat((x[..., -self.padding:, :], x, x[..., :self.padding, :]), dim=-2) return x
之后在Generator中使用时,直接传入CircularPad2d(padding=1)即可,后续需要调整填充大小也更方便。
需要注意的是,PyTorch官方并没有提供原生的循环填充模块,所以你手动实现的方式是必要的,当前的写法可以正常运行。
内容的提问来源于stack exchange,提问作者yx feng
相关产品推荐
相关产品推荐

