【问题标题】:Use torch.square() inside a nn.Sequential layer in PyTorch在 PyTorch 的 nn.Sequential 层中使用 torch.square()
【发布时间】:2021-08-26 00:39:37
【问题描述】:

我想对 maxpool 层的结果求平方。 我尝试了以下方法:

class CNNClassifier(Classifier):  # nn.Module
    def __init__(self, in_channels):
        super().__init__()
        self.save_hyperparameters('in_channels')
        self.cnn = nn.Sequential(
            # maxpool
            nn.MaxPool2d((1, 5), stride=(1, 5)),
            torch.square(),
            # layer1
            nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=5, 
        )

对于有经验的 PyTorch 用户来说,这肯定是没有意义的。

确实,错误很明显:

TypeError: square() 缺少 1 个必需的位置参数:“输入”

如何输入以平方上一层的张量?

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    您不能将 PyTorch 函数放在 nn.Sequential 管道中,它必须是 nn.Module

    你可以这样包装:

    class Square(nn.Module):
        def forward(self, x):
            return torch.square(x)
    

    然后像这样在顺序层中使用它:

    class CNNClassifier(Classifier):  # nn.Module
        def __init__(self, in_channels):
            super().__init__()
            self.save_hyperparameters('in_channels')
            self.cnn = nn.Sequential(
                nn.MaxPool2d((1, 5), stride=(1, 5)),
                Square(),
                nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=5))
    

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2021-05-11
      • 2020-10-07
      • 2020-05-11
      • 2021-01-09
      • 2019-05-25
      • 2020-10-09
      • 2019-10-19
      • 2017-11-01
      相关资源
      最近更新 更多