【问题标题】:TypeError: forward() takes 1 positional argument but 2 were givenTypeError: forward() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2020-05-28 12:19:11
【问题描述】:
class DeConv2d(nn.Module):
    def __init__(self, in_channel, out_channel, kernel_size, stride, padding, dilation):
        super().__init__()

        self.up = nn.Upsample(scale_factor=2, mode='nearest')
        self.conv = nn.Conv2d(in_channel, out_channel, kernel_size=kernel_size, \
                              stride=stride, padding=padding, dilation=dilation)


    def forward(self, x):

        output = self.up(x)
        output = self.conv(output)

        return output

class EncoderDecoder(nn.Module):
    def __init__(self, pretrained_net, n_class):
        super().__init__()
        self.n_class = n_class
        self.pretrained_net = pretrained_net
        self.relu = nn.ReLU(inplace=True)

        self.deconv1 = DeConv2d(512, 512, kernel_size=3, stride=1, padding=1, dilation=1)
        self.bn1 = nn.BatchNorm2d(512)

        self.deconv2 = DeConv2d(512, 256, kernel_size=3, stride=1, padding=1, dilation=1)
        self.bn2 = nn.BatchNorm2d(256)

        self.deconv3 = DeConv2d(256, 128, kernel_size=3, stride=1, padding=1, dilation=1)
        self.bn3 = nn.BatchNorm2d(128)

        self.deconv4 = DeConv2d(128, 64, kernel_size=3, stride=1, padding=1, dilation=1)
        self.bn4 = nn.BatchNorm2d(64)

        self.classifier = nn.Conv2d(64, n_class, kernel_size=1)

    def forward(self, x):

        output=self.pretrained_net.layers(x)


        output=self.relu(self.deconv1(output))
        output=self.bn1(output)


        output=self.relu(self.deconv2(output))
        output=self.bn2(output)


        output=self.relu(self.deconv3(output))
        output=self.bn3(output)


        output=self.relu(self.deconv4(output))
        output=self.bn4(output)


        output=self.classifier(output)



        return output

这是我的代码,我不知道为什么存在类型错误。有人知道如何解决这些问题吗?

【问题讨论】:

  • 类将被添加到块中
  • 能否请您格式化问题并添加更多详细信息的错误输出。
  • 我发现这个是因为我在使用 PyTorch 时遇到了同样的错误,但无法弄清楚原因。我同意@nsidn98 的观点,即您应该添加有关您遇到的错误的更多信息,即完整的回溯。
  • 在我的情况下,当我在调用 model(data) 后在内部调用 forward() 时出现此错误。

标签: python pytorch


【解决方案1】:

当您创建一个类,并在该类中使用 self 参数定义一个函数时,self 会自动填充该类。例如:

class item():# create a random class
 self.var = 0
 def fun(self,x):
  self.var +=x
n = item()

你可以尝试添加:

n.fun(3)
print(n.var)

返回3

self 参数自动填充类本身

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2021-08-20
    • 2020-06-16
    • 2017-01-12
    • 2017-04-22
    • 2019-07-07
    • 2020-12-29
    相关资源
    最近更新 更多