nn.ConvTranspose2d 中的 output_padding 做了什么?

问题描述

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

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

解决方法

根据此处的文档: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,8,8)

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

out1 = conv1(conv_inp1)     
out2 = conv1(conv_inp2)
print(out1.shape)         # torch.Size([1,3,3])
print(out2.shape)         # torch.Size([1,3])

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

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

print(transposed1.shape)      # torch.Size([1,7])
print(transposed2.shape)      # torch.Size([1,8])