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
6x1
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...