The output of your first nn.ConvTranspose2d layer will be [batch_size, 64, 3, 3], which is too small for the next one, which uses a kernel size of 4.
You could use a kernel size of 4 for the first nn.ConvTranpose2d layer.
This, however, will yield an error in the last one, since you are using nn.Conv2d layers afterwards in your decoder. Is that a typo or do you really want to lower the spatial size again?