张量流中conv2d的顺序输出是多少?

时间:2017-11-04 16:14:36

标签: tensorflow

我想在张量流中得到输出张量的值。 第一层的内核形状是K [row,col,in_channel,out_channel]。 输入图像形状为P [batch,row,col,channel] 但我尝试获得前四个内核值,它们是K[0, 0, 0, 0], K[0, 1, 0, 0], K[1, 0, 0, 0], K[1, 1, 0, 0].

我得到的输入值为P[0, 0, 0, 0], P[0, 0, 1, 0], P[0, 1, 0, 0], P[0, 1, 1, 0].

python代码是" F = tf.nn.conv2d(P, K, stride=[1, 1, 1, 1], padding='SAME')"

控制台显示输出值(F[0, 0, 0, 0]) is not K[0, 0, 0, 0] * P[0, 0, 0, 0] + K[0, 1, 0, 0] * P[0, 0, 1, 0] + K[1, 0, 0, 0] * P[0, 1, 0, 0] + K[1, 1, 0, 0] * P[0, 1, 1, 0]

这些输出要素图的顺序是什么?我有40 conv_kernel,第一个输出不是由第一个conv_kernel

计算的

1 个答案:

答案 0 :(得分:1)

您的输入值存在问题。

请记住,conv2d需要一个形状为[batch, in_height, in_width, in_channels]的输入张量和一个形状为[filter_height, filter_width, in_channels, out_channels]的滤镜/内核张量。

事实上,重塑数据结果是预期的结果(请注意,conv2d计算相关性而不是卷积)。

import tensorflow as tf

K = tf.get_variable("K", shape=(4,4), initializer=tf.constant_initializer([
        [0, 0, 0, 0],
        [0, 1, 0, 0],
        [1, 0, 0, 0], 
        [1, 1, 0, 0]
    ]))

K = tf.reshape(K, (4,4,1,1))


P = tf.get_variable("P", shape=(4,4), initializer=tf.constant_initializer([
        [0, 0, 0, 0],
        [0, 0, 1, 0],
        [0, 1, 0, 0],
        [0, 1, 1, 0]
    ]))

P = tf.reshape(P, (1,4,4,1))


F = tf.nn.conv2d(P, K, strides=[1, 1, 1, 1], padding='VALID')
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(F))

在这个例子中,我计算输入P(一个深度为1的元素的批处理)和滤波器P(4x4滤波器,输入深度为1,输出深度为1)之间的相关性。