Из 2D в 3D с помощью сверточных автоэнкодеров

Я хочу реконструировать 3D-объект из 2D-изображения. Для этого я пытаюсь использовать сверточный автоматический кодировщик. Однако, в каком слое я должен поднять размерность?

Я написал код ниже, однако он показывает ошибку:

«RuntimeError: недопустимый аргумент 2: размер« [1 x 1156 x 1156]» недопустим для ввода с 2312 элементами в pytorch-src/torch/lib/TH/THStorage.c:41»

class dim_lifting(nn.Module):
    def __init__(self):
        super(dim_lifting, self).__init__()
        self.encode = nn.Sequential(
            nn.Conv2d(1, 34, kernel_size=5, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(34, 16, kernel_size=5, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(16, 8, kernel_size=5, padding=2),
            nn.MaxPool2d(2),
            nn.LeakyReLU()
        )

        self.fc1 = nn.Linear(2312, 2312)
        self.decode = nn.Sequential(
            nn.ConvTranspose3d(1, 16, kernel_size=5, padding=2),
            nn.LeakyReLU(),
            nn.ConvTranspose3d(16, 32, kernel_size=5, padding=2),
            nn.LeakyReLU(),
            nn.MaxPool2d(2))

    def forward(self, x):
        out = self.encode(x)
        out = out.view(out.size(0), -1)
        out = self.fc1(out)
        out = out.view(1, 1156, 1156)
        out = self.decode(out)
        return out

Здесь происходит ошибка

out = out.view(1, 1156, 1156)

person soshi shimada    schedule 19.11.2017    source источник
comment
Вы уверены, что размеры, указанные в out = out.view(1, 1156, 1156), верны? Похоже, вы не можете вписать ввод с 2312 элементами в 1 * 1156 * 1156 = 1336336.   -  person Manuel Lagunas    schedule 19.11.2017


Ответы (1)


Я не могу проверить свое предложение, потому что ваш пример не завершен. Я думаю, ваша линия должна понравиться

out = out.view(x.size(0), -1)

таким образом вы сглаживаете свой ввод.

person Harry Yoo    schedule 20.11.2017