【问题标题】:tuple object not callable when building a CNN in Pytorch在 Pytorch 中构建 CNN 时,元组对象不可调用
【发布时间】:2019-09-16 09:02:37
【问题描述】:

我是神经网络的新手,目前正在尝试构建具有 2 个卷积层的 CNN。

class CNN(nn.Module):
  def __init__(self):
    super(CNN, self).__init__()
    self.conv1 = nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 3, stride = 1, padding = 1), 
    self.maxp1 = nn.MaxPool2d(2),
    self.conv2 = nn.Conv2d(in_channels = 16, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
    self.fc1 = nn.Linear(16, 64),
    self.fc2 = nn.Linear(64, 10)

  def forward(self, x):
    x = nn.ReLU(self.maxp1(self.conv1(x)))
    x = nn.ReLU(self.maxp2(self.conv1(x)))
    x = x.view(x.size(0), -1)
    x = nn.ReLu(self.fc1(x))
    return self.fc2

我尝试做的是 ConvLayer- ReLu 激活 - Max Pooling 2x2 - ConvLayer - ReLu 激活 - 展平层 - 完全连接 - ReLu - 完全连接

然而,这给了我TypeError: 'tuple' object is not callable x = nn.ReLU(self.maxp1(self.conv1(x)))

我该如何解决这个问题?

【问题讨论】:

    标签: conv-neural-network pytorch


    【解决方案1】:

    您可以将nn.ReLU 更改为F.relu

    如果你想使用nn.ReLU(),你最好将它声明为__init__方法的一部分,然后在forward()中调用它:

    class CNN(nn.Module):
      def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 3, stride = 1, padding = 1), 
        self.maxp1 = nn.MaxPool2d(2),
        self.conv2 = nn.Conv2d(in_channels = 16, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
        self.fc1 = nn.Linear(16, 64),
        self.fc2 = nn.Linear(64, 10)
        self.relu = nn.ReLU(inplace=True)
    
      def forward(self, x):
        x = self.relu(self.maxp1(self.conv1(x)))
        x = self.relu(self.maxp2(self.conv1(x)))
        x = x.view(x.size(0), -1)
        x = self.relu(self.fc1(x))
        return self.fc2
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2022-11-30
      • 2020-07-17
      • 2020-08-29
      • 2021-09-30
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多