Tensorflow:经过一系列的卷积和反卷积得到相同的张量
Tensorflow: Get the same tensor after a series of convolution and deconvolution
我想知道是否有可能在通过卷积然后反卷积滤波器传播后得到相同的张量。例如:
random_image = np.random.rand(1, 6, 6, 3)
input_image = tf.placeholder(shape=[1, 6, 6, 3], dtype=tf.float32)
conv = tf.layers.conv2d(input_image, filters=6, kernel_size=[3, 3], strides=(1, 1), data_format="channels_last")
deconv = tf.layers.conv2d_transpose(conv, filters=3, kernel_size=[3, 3], strides=(1, 1), data_format="channels_last")
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(random_image)
# Get an output which will be same as:
print(sess.run(deconv, feed_dict={input_image: random_image}))
换句话说,如果生成的random_image
向量是例如:[1,2,3,4,5]
,在卷积和反卷积之后deconv
向量是[1,2,3,4,5]
.
但是,我无法让它工作。
期待您的解答!
有可能获得某种程度的视觉相似性,例如,通过使用 VarianceScaling 初始化。甚至使用完全自定义的初始化程序。但是转置卷积并不是数学上的反卷积。所以你不能用 conv2d_transpose
得到数学上的相等性。
看看Why isn't this Conv2d_Transpose / deconv2d returning the original input in tensorflow?
我想知道是否有可能在通过卷积然后反卷积滤波器传播后得到相同的张量。例如:
random_image = np.random.rand(1, 6, 6, 3)
input_image = tf.placeholder(shape=[1, 6, 6, 3], dtype=tf.float32)
conv = tf.layers.conv2d(input_image, filters=6, kernel_size=[3, 3], strides=(1, 1), data_format="channels_last")
deconv = tf.layers.conv2d_transpose(conv, filters=3, kernel_size=[3, 3], strides=(1, 1), data_format="channels_last")
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(random_image)
# Get an output which will be same as:
print(sess.run(deconv, feed_dict={input_image: random_image}))
换句话说,如果生成的random_image
向量是例如:[1,2,3,4,5]
,在卷积和反卷积之后deconv
向量是[1,2,3,4,5]
.
但是,我无法让它工作。
期待您的解答!
有可能获得某种程度的视觉相似性,例如,通过使用 VarianceScaling 初始化。甚至使用完全自定义的初始化程序。但是转置卷积并不是数学上的反卷积。所以你不能用 conv2d_transpose
得到数学上的相等性。
看看Why isn't this Conv2d_Transpose / deconv2d returning the original input in tensorflow?