Аналогично вопросу здесь , решение, по-видимому, состоит в том, чтобы отделить слой 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)