我试图在我的程序中使用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]]]
时,它就可以了。
我怀疑这可能与multiply
和x
是随机变量有关。有人暗示过这个吗?
答案 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的输出,而不是打印。