In documentation 127, there are the code annotations as below.
input = autograd.Variable(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()         # (1, 16, 6, 6)
output = upsample(h, output_size=input.size())
output.size()    # (1, 16, 12, 12)

However, the actual output.size() returns (1, 16, 11, 11). Is this normal? I think it should be (1, 16, 12, 12) because ConvTranspose2d is just opposite operation for Conv2d.