Examples:
  >>> # With square kernels and equal stride
  >>> m = nn.ConvTranspose2d(16, 33, 3, stride=2)
  >>> # non-square kernels and unequal stride and with padding
  >>> m = nn.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
  >>> input = torch.randn(20, 16, 50, 100)
  >>> output = m(input)
  >>> # exact output size can be also specified as an argument
  >>> input = torch.randn(1, 16, 12, 12)
  >>> downsample = nn.Conv2d(16, 16, 3, stride=2, padding=1)
  >>> upsample = nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1)
  >>> h = downsample(input)
  >>> h.size()
  torch.Size([1, 16, 6, 6])
  >>> output = upsample(h, output_size=input.size())
  >>> output.size()
  torch.Size([1, 16, 12, 12])
