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

저는 Tensorflow의 컨볼 루션을 되돌리기 위해 conv2d_transpose를 알아 내려고 노력했습니다. 내 이해는 "deconvolved"는 일반적인 컨볼 루션을 적용한 후 "잡음"과 동일한 데이터를 포함해야하지만, "deconvolved"는 완전히 다른 이미지를 포함합니다. 내 코드에 문제가 있습니까? 아니면 이론이 잘못 되었습니까?Conv2d_Transpose/deconv2d가 텐서 흐름의 원래 입력을 반환하지 않는 이유는 무엇입니까?

답변

1

deconv2d이 아닌 conv2d_transpose이라고하는 이유가 있습니다. 이는 deconvolution이 아닙니다. 컨볼 루션은 직교 변환이 아니므로 역 (역 회전)은 조바꿈 (conv2d_transpose)과 다릅니다.

당신의 혼란은 이해할 수 있습니다 : 컨볼 루션 "deconvolution"의 전치를 호출하는 것은 오랜 세월 동안 표준 신경 회로망 연습이었습니다. TensorFlow에서 수학적으로 올바른 이름을 고칠 수 있었던 것보다 기쁩니다. 자세한 내용은 여기 :

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

관련 문제