簡體   English   中英

PyTorch 的 ConvTranspose2d 的 output 形狀的代數表達式是什么?

[英]What is the algebraic expression for PyTorch's ConvTranspose2d's output shape?

當使用 PyTorch 的 ConvTranspose2d 時:

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

output各通道尺寸計算公式是什么? 我嘗試了一些示例,但無法得出模式。 由於某種原因,添加填充似乎會縮小 output 大小(示例以 5 x 5 開頭,如上):

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

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

使用更大的 kernel 或跨步都增加(預期)但不是以我預期的速度:

# 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 編譯和生成正確大小的能力。 提前致謝!

文檔頁面上提到了計算ConvTranspose2d output 大小的公式:

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

默認情況下,stride=1,padding=0,output_padding=0。

例如,對於

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

H_out將是

H_out = (5-1)*2 - 2*0 + 1*(3-1) + 0 + 1 = 11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM