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中反转卷积。我的理解是"去卷积"应包含与"噪音相同的数据"在应用正常卷积然后进行转置后,但是"去卷积"只是包含一些完全不同的图像。我的代码有问题,还是理论不正确?
答案 0 :(得分:4)
有一个原因叫它conv2d_transpose
而不是deconv2d
:它不是反卷积。卷积不是正交变换,因此它的逆(解卷积)与其转置(conv2d_transpose
)不同。
你的困惑是可以理解的:调用卷积转换“deconvolution”多年来一直是标准的神经网络实践。我很高兴我们能够在TensorFlow中修改名称在数学上是正确的;更多详情: