2016-06-17 2 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がテンソルフローの元の入力を返さないのはなぜですか?

答えて

1

deconv2dではなく、conv2d_transposeと呼ばれる理由があります。デコンボリューションではありません。畳み込みは直交変換ではないので、逆(デコンボリューション)はその転置(conv2d_transpose)と同じではありません。

あなたの混乱は理解できます:convolution "deconvolution"の転置を呼び出すことは、何年もの間、標準的なニューラルネットワークのプラクティスでした。私はTensorFlowで数学的に正しい名前を修正することができたのは幸いです。詳細はこちら

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

関連する問題