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

如何在PyTorch的nn.Sequential层中使用torch.square()对张量求平方

报错原因

你遇到的报错核心原因是torch.square()属于PyTorch的函数式API,调用时必须主动传入输入张量,本身不属于nn.Module的子类实例,无法直接放入nn.Sequential容器中自动承接前序层的输出执行计算。另外你原代码里Conv2d定义末尾缺少闭合的右括号,修改时需要一并补全。

解决方法

有两种常用方案可以实现需求:

  • 方法1:使用nn.Lambda封装(适配PyTorch 1.10及以上版本)
    直接将torch.square用nn.Lambda包装为符合nn.Sequential要求的模块即可,修改后的完整序列代码如下:
self.cnn = nn.Sequential(
    # maxpool
    nn.MaxPool2d((1, 5), stride=(1, 5)),
    nn.Lambda(lambda x: torch.square(x)),
    # layer1
    nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=5)
)
  • 方法2:自定义平方层(全版本兼容)
    如果使用的PyTorch版本不支持nn.Lambda,可以自行实现一个极简的自定义模块:
class SquareLayer(nn.Module):
    def forward(self, x):
        return torch.square(x)

之后将自定义层放入nn.Sequential即可:

self.cnn = nn.Sequential(
    # maxpool
    nn.MaxPool2d((1, 5), stride=(1, 5)),
    SquareLayer(),
    # layer1
    nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=5)
)

内容的提问来源于stack exchange,提问作者shamalaia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:02