This is expected, and that’s why there is the output_size argument to ConvTranspose2d, that compensates for it.
As an example, suppose there is a convolution of stride 2 and kernel size 2. When applying it to a 4x4 image, the result is a 2x2 image. Now, if you apply the same convolution to a 5x5 image, the result will also be 2x2, so for a given Conv2d, two inputs map to the same output size.