前驅知識
符號規定:
卷積過程
- input_size = i
- kernel_size = k
- stride = s
- padding = p
- output_size = o
對應的反捲積過程:
- input_size = i’
- kernel_size = k’
- stride = s’
- padding = p’
- output_size = o’
- a = (i+2p-k)%s,即無法完整卷積的餘數
且有:k’=k, s’=1, i’=o, o’=i
nn.ConvTranspose2d()關鍵參數
- in_channels(int) – 輸入的通道數
- out_channels(int) – 卷積產生的通道數
- kerner_size(int or tuple) - 與此次反捲積對應的卷積的卷積核大小,即 k
- stride(int or tuple,optional) - 與此次反捲積對應的卷積的卷積步長,即 s
- padding(int or tuple, optional) - 與此次反捲積對應的卷積的單側padding大小,即 p
- output_padding(int or tuple, optional) - 輸出邊補充0的層數,即 a
例如,一張 (1, 3, 14, 14)的圖像,使用ConvTranspose2d(3, 1, kernel_size=3, stride=2, padding=1, output_padding=1)進行反捲積:
i’=14,
k=3,
s=2,
p=1,
a=1.
根據反捲積計算規則:
k’=k=3,
s’=1,
p’=k-1-p=1,
因爲s>1,對i’內部填充0,i’’=14+(s-1)(14-1)=27
所以,反捲積之後的輸出尺寸爲:
o’ = (i’’+2p’-k’+a)/s’ + 1 = (27+2*1-3+1)/1 + 1 = 28
輸出尺寸翻倍。