4
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})

Tensorflow で畳み込みを逆にするために、conv2d_transpose を理解しようとしています。私の理解では、「デコンボリューション」には、通常の畳み込みとその転置を適用した後の「ノイズ」と同じデータが含まれているはずですが、「デコンボリューション」にはまったく異なる画像が含まれているだけです。私のコードに何か問題がありますか、それとも理論が間違っていますか?

4

1 に答える 1

4

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

あなたの混乱は理解できます。畳み込みの転置を「デコンボリューション」と呼ぶことは、何年にもわたってニューラル ネットワークの標準的な慣行でした。名前を TensorFlow で数学的に正しいものに修正できたことを嬉しく思います。詳細はこちら:

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

于 2016-06-19T05:21:05.143 に答える