一句話解釋:逆卷積相對於卷積在神經網絡結構的正向和反向傳播中作相反的運算。python
逆卷積(Deconvolution)比較容易引發誤會,轉置卷積(Transposed Convolution)是一個更爲合適的叫法.api
舉個栗子:網絡
4x4的輸入,卷積Kernel爲3x3, 沒有Padding / Stride, 則輸出爲2x2。輸入矩陣可展開爲16維向量,記做
輸出矩陣可展開爲4維向量,記做
卷積運算可表示爲dom
平時神經網絡中的正向傳播就是轉換成了如上矩陣運算。ide
那麼當反向傳播時又會如何呢?首先咱們已經有從更深層的網絡中獲得的. spa
回想第一句話,你猜的沒錯,所謂逆卷積其實就是正向時左乘,而反向時左乘,即的運算。.net
下圖標註有誤,「SAME」應爲「VALID」,kernel爲3,stride爲1,卷積輸出爲(輸入-核+1)/步長。orm
tf.nn.conv2d_transpose()blog
kernel = tf.random_normal(shape=[2,2,3,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的維度,若是不能,則報錯。接口