The major difference between nn.Upsample and nn.ConvTranspose2d is that nn.ConvTranspose2d has learnable weights because it has convolution kernels like nn.Conv2d, whereas nn.Upsample has no learnable weights and just applies a choosen interpolation algorithm ( ‘nearest’ , ‘linear’ , ‘bilinear’ , ‘bicubic’ or ‘trilinear’).
So I would say that nn.ConvTranspose2d is more powerful because it is “learnable”.
.