逆卷積(deconvolution)比較容易引起誤會,轉置卷積(transposed convolution)是乙個更為合適的叫法.
舉個栗子:
4x4的輸入,卷積kernel為3x3, 沒有padding / stride, 則輸出為2x2。
輸入矩陣可展開為16維向量,記作
輸出矩陣可展開為4維向量,記作
卷積運算可表示為
不難想象
其實就是如下的稀疏陣:
平時神經網路中的正向傳播就是轉換成了如上矩陣運算。
那麼當反向傳播時又會如何呢?首先我們已經有從更深層的網路中得到的
. 回想第一句話,你猜的沒錯,所謂逆卷積其實就是正向時左乘
,而反向時左乘
,即的運算。
下圖標註有誤,「same」應為「valid」,kernel為3,stride為1,卷積輸出為(輸入-核+1)/步長。
# strides 和padding也是假想中 正向卷積的模樣。當然,x是正向卷積後的模樣
y = tf.nn.conv2d_transpose(x,kernel,output_shape=[1,5,5,3],
strides=[1,2,2,1],padding="same")
# 在這裡,output_shape=[1,6,6,3]也可以,考慮正向過程,[1,6,6,3]
# 通過kernel_shape:[2,2,3,1],strides:[1,2,2,1]也可以
注意:conv2d_transpose 中會計算 output_shape 能否通過給定的引數計算出 inputs的維度,如果不能,則報錯。
api介紹部落格
TensotFlow 轉置卷積
一句話解釋 逆卷積相對於卷積在神經網路結構的正向和反向傳播中做相反的運算。逆卷積 deconvolution 比較容易引起誤會,轉置卷積 transposed convolution 是乙個更為合適的叫法.舉個栗子 4x4的輸入,卷積kernel為3x3,沒有padding stride,則輸出為2...
反卷積 轉置卷積
搞明白了卷積網路中所謂deconv到底是個什麼東西後,不寫下來怕又忘記,根據參考資料,加上我自己的理解,記錄在這篇部落格裡。第一次看到deconv這個詞,以為deconv的結果就是卷積的逆,覺得神奇,不禁產生了 哦?轉置的卷積就可以求逆了嗎?這樣的想法,然後在matlab裡面實驗求證,我還記得當時以...
轉置卷積 反卷積
借鑑於此個部落格,寫的非常好 轉置卷積 transposed convolution 也叫做反卷積 deconvolution pytorch中可以使用torch.nn.convtranspose2d 來呼叫,caffe中對應的轉置卷積層為deconv layer 作用 在 中用於對影象上取樣。操作...