output_padding 在 nn.ConvTranspose2d 中做什么?

What output_padding does in nn.ConvTranspose2d?

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

Conv2dTranspose(1024, 512, kernel_size=3, stride=2, padding=1, output_padding=1)

根据此处的文档:https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html 当使用 步幅 > 1 应用 Conv2D 操作时,您可以使用不同的输入获得相同的输出维度。例如,7x7 和 8x8 输入都会 return 3x3 输出,步幅 = 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])

并且在应用转置卷积时,对于stride=2转置卷积,哪个输出形状为return、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])