TypeError: forward () принимает 1 позиционный аргумент, но дано 2 - PullRequest
0 голосов
/ 28 мая 2020
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

это мой код, и я не знаю, почему существует ошибка типа. Кто-нибудь знает, как исправить эти проблемы?

1 Ответ

0 голосов
/ 29 мая 2020

Когда вы создаете класс и определяете функцию с 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 аргумент автоматически заполняется самим классом

...