Несоответствие размера тензора автоэнкодеру pytorch - PullRequest
0 голосов
/ 02 марта 2020

Я использую составной Autoencoder, который представляет собой набор слоев Conv. Однако, у меня ошибка несоответствия тензора, и я не уверен в причине. Все, что сделано в энкодере, переворачивается в декодере!

Это для данных временных рядов. Форма ввода (bactch_size, 1, 3000)

Вот код

class CDAutoEncoder(nn.Module):
    def __init__(self, input_size, output_size, kernel, stride):
        super(CDAutoEncoder, self).__init__()

        self.forward_pass = nn.Sequential(
            nn.Conv1d(input_size, output_size, kernel_size=kernel, stride=stride, padding=0),
            nn.PReLU(),
        )
        self.backward_pass = nn.Sequential(
            nn.ConvTranspose1d(output_size, input_size, kernel_size=kernel, stride=stride, padding=0),
            nn.PReLU(),
        )

    def forward(self, x):
        y = self.forward_pass(x)
        return y

    def reconstruct(self, x):
        return self.backward_pass(x)


class StackedAutoEncoder(nn.Module):
    def __init__(self):
        super(StackedAutoEncoder, self).__init__()

        self.ae1 = CDAutoEncoder(1, 32, 50, 10)
        self.ae2 = CDAutoEncoder(32, 64, 10, 3)
        self.ae3 = CDAutoEncoder(64, 64, 5, 1)

    def forward(self, x):
        a1 = self.ae1(x)
        a2 = self.ae2(a1)
        a3 = self.ae3(a2)

        return self.reconstruct(a3)

    def reconstruct(self, x):
        a2_reconstruct = self.ae3.reconstruct(x)
        a1_reconstruct = self.ae2.reconstruct(a2_reconstruct)
        x_reconstruct = self.ae1.reconstruct(a1_reconstruct)
        return x_reconstruct

Ошибка:

RuntimeError: The size of tensor a (2990) must match the size of tensor b (3000) at non-singleton dimension 2

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

Очевидно, что нет ничего похожего на "одинаковое" заполнение, так есть ли автоматическое решение для этого?

...