Pythorch的ConvTranspose2d的输出形状的代数表达式是什么?

2024-05-23 19:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Pythorch的ConvTranspose2d时:

w = 5 # input width
h = 5 # output height
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=k, stride=s, padding=p)

每个通道的输出尺寸公式是什么?我试了几个例子,但无法推导出模式。出于某些原因,添加填充似乎会缩小输出大小(示例以5 x 5开头,如上所示):

^{pr2}$

使用更大的内核或步幅都会增加(预期),但不会以我预期的速度增长:

# yields an 11 x 11 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=0) 

# yields a 13 x 13 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=5, stride=2, padding=0)

# yields a 15 x 15 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=3, padding=0)

我确信有一个非常简单的数学方程,涉及w, h, k, s, p,但我在文档中找不到它,我自己也无法推导出它。通常我不会要求一个数学公式,但它完全影响了CNN编译和生成正确大小的能力。提前谢谢!在


Tags: inimageinputoutputsizennoutwidth
1条回答
网友
1楼 · 发布于 2024-05-23 19:15:52

计算ConvTranspose2d输出大小的公式在documentation页面中提到:

H_out ​= (H_in​−1)*stride[0] − 2×padding[0] + dilation[0]×(kernel_size[0]−1) + output_padding[0] + 1

W_out​ = (Win​−1)×stride[1] − 2×padding[1] + dilation[1]×(kernel_size[1]−1) + output_padding[1] + 1

默认情况下,步幅为1,填充为0,输出为0。在

例如,对于

nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=0) 

H_out将是

^{pr2}$

相关问题 更多 >