nn.ConvTranspose2d 中的output_padding 有何作用?

Han*_*ns2 13 convolution conv-neural-network deconvolution pytorch

Conv2dTranspose 中 Output_padding 的作用是什么?请帮助我理解这一点?

Conv2dTranspose(1024, 512, kernel_size=3, stride=2, padding=1, output_padding=1)
Run Code Online (Sandbox Code Playgroud)

yut*_*bot 24

根据此处的文档: https: //pytorch.org/docs/stable/ generated/torch.nn.ConvTranspose2d.html 当应用Stride > 1 的 Conv2D 操作时,您可以使用不同的输入获得相同的输出尺寸。例如,7x7 和 8x8 输入都将返回 3x3 输出,且 Stride=2:

import torch

conv_inp1 = torch.rand(1,1,7,7)
conv_inp2 = torch.rand(1,1,8,8)

conv1 = torch.nn.Conv2d(1, 1, kernel_size = 3, stride = 2)

out1 = conv1(conv_inp1)     
out2 = conv1(conv_inp2)
print(out1.shape)         # torch.Size([1, 1, 3, 3])
print(out2.shape)         # torch.Size([1, 1, 3, 3])
Run Code Online (Sandbox Code Playgroud)

当应用转置卷积时,返回哪个输出形状是不明确的,对于步长=2转置卷积,是7x7还是8x8。输出填充可帮助 pytorch 使用 output_padding 参数确定 7x7 或 8x8 输出。请注意,它不会填充零或任何要输出的内容,它只是确定输出形状并相应地应用转置卷积的一种方法。

conv_t1 = torch.nn.ConvTranspose2d(1, 1, kernel_size=3, stride=2)
conv_t2 = torch.nn.ConvTranspose2d(1, 1, kernel_size=3, stride=2, output_padding=1)
transposed1 = conv_t1(out1)
transposed2 = conv_t2(out2)

print(transposed1.shape)      # torch.Size([1, 1, 7, 7])
print(transposed2.shape)      # torch.Size([1, 1, 8, 8])
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的解释。万分感激。 (3认同)