pytorch中 nn.ConvTransposed2d 的使用

前驅知識

卷積與反捲積

符號規定:

卷積過程

  • 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’’+2
p’-k’+a)/s’ + 1 = (27+2*1-3+1)/1 + 1 = 28
輸出尺寸翻倍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章