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

我一直在尝试找出 conv2d_transpose 以反转 Tensorflow 中的卷积。我的理解是,在应用正常卷积然后转置之后,“反卷积”应该包含与“噪声”相同的数据,但“反卷积”只包含一些完全不同的图像。我的代码有问题,还是理论不正确?

4

1 回答 1

4

conv2d_transpose它被称为而不是是有原因的deconv2d:它不是反卷积。卷积不是正交变换,因此它的逆(反卷积)与其转置(conv2d_transpose)不同。

您的困惑是可以理解的:多年来,将卷积的转置称为“反卷积”一直是标准的神经网络实践。我很高兴我们能够在 TensorFlow 中将名称修复为数学上正确的;更多细节在这里:

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

于 2016-06-19T05:21:05.143 回答