张量流中乘法的奇怪行为

时间:2018-04-01 11:21:26

标签: tensorflow

我试图在我的程序中使用multiply,但我发现这个op的行为是不正常的。似乎它正在计算错误的结果。最小例子:

  if indexPath.row == lastItem && !loading {
    loading = true
    loadMore()
}

结果:

import tensorflow as tf

batchSize = 2
maxSteps = 3
max_cluster_size = 4

x = tf.Variable(tf.random_uniform(dtype=tf.int32, maxval=20, shape=[batchSize, maxSteps, max_cluster_size]))

y = tf.sequence_mask(tf.random_uniform(minval=1, maxval=max_cluster_size-1, dtype=tf.int32, shape=[batchSize, maxSteps]), maxlen=max_cluster_size)

y = tf.cast(y, tf.int32)

z = tf.multiply(x, y)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    x_v = sess.run(x)
    y_v = sess.run(y)
    z_v = sess.run(z)

    print(x_v.shape)
    print(x_v)
    print('----------------------------')
    print(y_v.shape)
    print(y_v)
    print('----------------------------')
    print(z_v.shape)
    print(z_v)
    print('----------------------------')

预计(2, 3, 4) [[[ 7 12 19 3] [10 18 15 7] [18 9 2 7]] [[ 4 5 16 1] [ 2 14 15 14] [ 5 18 8 18]]] ---------------------------- (2, 3, 4) [[[1 1 0 0] [1 0 0 0] [1 1 0 0]] [[1 1 0 0] [1 1 0 0] [1 1 0 0]]] ---------------------------- (2, 3, 4) [[[ 7 12 0 0] [10 0 0 0] [18 0 0 0]] [[ 4 5 0 0] [ 2 0 0 0] [ 5 0 0 0]]] ---------------------------- 的位置:

z_v

当我在其他程序中测试[[[ 7 12 0 0] [10 0 0 0] [18 9 0 0]] [[ 4 5 0 0] [ 2 14 0 0] [ 5 18 0 0]]] 时,它就可以了。 我怀疑这可能与multiplyx是随机变量有关。有人暗示过这个吗?

1 个答案:

答案 0 :(得分:1)

而不是这些行:

x_v = sess.run(x)
y_v = sess.run(y)
z_v = sess.run(z)

你需要使用它:

x_v, y_v, z_v = sess.run( [ x, y, z ] )

使用第一个单独的版本,基本上最终会发生的是你创建x_v,然后是y_v,但是当你运行sess.run(z)时它也将重新计算z的依赖关系,所以你结束了查看不同x和y的输出,而不是打印。