I’m using stacked Autoencoder, which is a bunch of Conv layers. However, I’m having a tensor mismatch error, and I’m not sure about the reason. Everything done in the Encoder is reversed in the Decoder!
This is for time-series data. Input shape is  (bactch_size, 1, 3000)
Here’s the code:
lass 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

The error:
RuntimeError: The size of tensor a (2990) must match the size of tensor b (3000) at non-singleton dimension 2
I’ve tried adding padding and it worked, but when I changed the kernel size I get different tensor-size-mismatch-error. Also, same error appears if I tried to add AvgPool1d(2) layer … I use nn.Upsample(scale_factor=2) in the decoder, but same mismatch error appears.
Apparently, there’s nothing like ‘same’ padding, so is there automated solution for this?