В автоэнкодере MaxUnpool2d отсутствует аргумент «Индексы» - PullRequest
0 голосов
/ 25 января 2020

Следующая модель возвращает ошибку: TypeError: forward () отсутствует 1 обязательный позиционный аргумент: 'indices'

Я исчерпал много онлайн-примеров, и все они выглядят как мои код. Мой слой maxpool возвращает входные данные и индексы для unpool слоя. Есть идеи, что не так?

class autoencoder(nn.Module):
def __init__(self):
    super(autoencoder, self).__init__()
    self.encoder = nn.Sequential(
        ...
        nn.MaxPool2d(2, stride=1, return_indices=True)
    )
    self.decoder = nn.Sequential(
        nn.MaxUnpool2d(2, stride=1),
        ...
    )

def forward(self, x):
    x = self.encoder(x)
    x = self.decoder(x)
    return x

1 Ответ

1 голос
/ 25 января 2020

Аналогично вопросу здесь , решение, по-видимому, состоит в том, чтобы отделить слой maxunpool от декодера и явно передать его требуемые параметры. nn.Sequential принимает только один параметр.

class SimpleConvAE(nn.Module):
def __init__(self):
    super().__init__()

    # input: batch x 3 x 32 x 32 -> output: batch x 16 x 16 x 16
    self.encoder = nn.Sequential(
        ...
        nn.MaxPool2d(2, stride=2, return_indices=True),
    )

    self.unpool = nn.MaxUnpool2d(2, stride=2, padding=0)

    self.decoder = nn.Sequential(
        ...
    )

def forward(self, x):
    encoded, indices = self.encoder(x)
    out = self.unpool(encoded, indices)
    out = self.decoder(out)
    return (out, encoded)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...