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

能否在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:47:03