2016-06-17 33 views
1
weights = tf.placeholder("float",[5,5,1,1]) 
imagein = tf.placeholder("float",[1,32,32,1]) 
conv = tf.nn.conv2d(imagein,weights,strides=[1,1,1,1],padding="SAME") 
deconv = tf.nn.conv2d_transpose(conv, weights, [1,32,32,1], [1,1,1,1],padding="SAME") 


dw = np.random.rand(5,5,1,1) 
noise = np.random.rand(1,32,32,1) 

sess = tf.InteractiveSession() 

convolved = conv.eval(feed_dict={imagein: noise, weights: dw}) 
deconvolved = deconv.eval(feed_dict={imagein: noise, weights: dw}) 

我一直想弄清conv2d_transpose爲了扭轉在Tensorflow中的卷積。我的理解是,「解卷積」應該包含與應用正常卷積然後其轉置之後的「噪聲」相同的數據,但「解卷積」只包含一些完全不同的圖像。我的代碼有什麼問題,或者理論不正確?爲什麼Conv2d_Transpose/deconv2d在tensorflow中返回原始輸入?

回答

1

有一個原因叫做conv2d_transpose而不是deconv2d:它不是反捲積。卷積不是一個正交變換,所以它的逆(反捲積)與其轉置不同(conv2d_transpose)。

您的困惑是可以理解的:調用卷積轉置「反捲積」已經標準化了多年的神經網絡實踐。我很高興,比我們能夠在TensorFlow中修復這個名稱在數學上是正確的;更多細節在這裏:

https://github.com/tensorflow/tensorflow/issues/256

相關問題