I think I know where the error comes from…
Your convolutions have a stride of 2. This means roughly (I hope I’m right) that each conv layer divides your input size by 2 (and removes a few elements on the borders due to no padding by default in the conv layer).
By printing the shape of the output of each layer, which you can do for the encoder with the following (the same with the decoder):
for module in self.encoder:
    x = module(x)
    print(x.shape)

You will see that the shape follows the following sequence: [94, 45, 21, 9] in the encoder, but the decoder gives [9, 21, 45, 93].
Now, I’m not familiar with the autoencoder architecture, specifically with how you need to setup your input sizes and kernel sizes for correct downsizing and upsizing… So you’ll need to check some documentation on that, I’m afraid this is the furthest I can help you.
I’ve just tried quickly changing the kernel size of the outermost convolutions (so the first conv in the encoder and the last conv transpose of the decoder) to 6 instead of 5, and this resulted in an output size of 94, but I’m not sure this is what you want or if it’s even valid…
P.S: if you format your code properly (by inserting it in a code block enclosed in two groups of three backticks `), it would be much easier to read it and help you! Copy-pasting the code directly failed, because the __init__ was changed to init due to markdown’s formatting shortcuts.