理解轉置卷積 反卷積 分步卷積

2021-09-13 11:38:58 字數 1391 閱讀 1309

gan涉及到轉置卷積,這裡mark一下忘記了再回來看下。

轉置卷積源於與卷積方向相反的願望,即從卷積的output形狀到input形狀,同時保持與卷積相相容的一種模式。轉置卷積可以作為卷積編碼器的解碼器(decode)的轉換,或者將當前特徵對映到乙個高維度的空間。

要理解轉置卷積,先從卷積開始。

我們先從2d卷積運算,kernel=3,input=4x4,stride=1,output=2x2,padding=valid。

我們將卷積運算轉化為矩陣運算,將kernel轉化為矩陣c4x

16c_

c4x16​

的,將input轉化為矩陣x16x

1x_x16x1​

,通過兩個矩陣的相乘獲取的y4x

1y_y4x1

​矩陣reshape為2x2的卷積結果。即y4x

1=c4

x16x16

x1y_=c_x_

y4x1​=

c4x1

6​x1

6x1​

我們以c的第一行為例,第一行要完成與input[:3,:3]乘加,其他不需要乘的對應權重則在這一行置為0。也可以這樣理解,這一行的每乙個元素都與x的每乙個元素相對應,不需要乘的記為0即可。最終獲得c矩陣如下圖。

我們再來考慮另乙個方向,將2x2作為輸入轉化為4x4,按照卷積步驟,並將c轉置。

x 16x

1=c4

x16ty

4x1x_=c_^y_

x16x1​

=c4x

16t​

y4x1

​上述稱之為轉置卷積。kernel定義卷積和轉置卷積,卷積和轉置卷積取決於前向和後向運算。對於卷積而言,前向和反向通過c和c

tc和c^t

c和ct

。對於轉置卷積而言,其前向和反向通過ct和

(ct)

tc^t和(c^t)^t

ct和(ct

)t。我們可以通過直接卷積模擬轉置卷積,但通常要向輸入新增不少0的行和列,這在運算上不高效。

我們可以這樣理解轉置卷積,可以把輸入看做是乙個初始特徵卷積後的結果,如上述3x3卷積核在4x4輸入卷積獲得2x2的結果,應用轉置卷積則輸出應該是4x4。另外一種理解方式是直接卷積,將2x2的輸入卷積成4x4的輸出,這裡需要0填充,為了保證與卷積相同的連線性模式,kernel第一次計算應該只接受輸入的左上角元素,所以填充大小=kernel-1。

關於其他的引數選擇,可以檢視**原文卷積與反卷積

git幫助理解的gifconvolution arithmetic

參考反卷積/轉置卷積 的理解

反卷積 轉置卷積

搞明白了卷積網路中所謂deconv到底是個什麼東西後,不寫下來怕又忘記,根據參考資料,加上我自己的理解,記錄在這篇部落格裡。第一次看到deconv這個詞,以為deconv的結果就是卷積的逆,覺得神奇,不禁產生了 哦?轉置的卷積就可以求逆了嗎?這樣的想法,然後在matlab裡面實驗求證,我還記得當時以...

轉置卷積 反卷積

借鑑於此個部落格,寫的非常好 轉置卷積 transposed convolution 也叫做反卷積 deconvolution pytorch中可以使用torch.nn.convtranspose2d 來呼叫,caffe中對應的轉置卷積層為deconv layer 作用 在 中用於對影象上取樣。操作...

反卷積(轉置卷積)的理解

參考 開啟鏈結 就是這個圖啦,其中藍色部分是輸入的feature map,然後有3 3的卷積核在上面以步長為2的速度滑動,可以看到周圍還加里一圈padding,用更標準化的引數方式來描述這個過程 二維的離散卷積 n 2 方形的特徵輸入 i i i 方形的卷積核尺寸 k k k 每個維度相同的步長 s...