我正在练习TensorFlow基本命令,并开始使用tf.transpose函数。我遇到了一种我无法解释的怪异行为。如果我运行此代码段:
with tf.Session() as test:
...: tf.set_random_seed(1)
...: A = tf.random_normal([2,3],mean=1,stddev=4)
...: B = tf.transpose(A)
...: print("A=" + str(A.eval()))
...: print("B=" + str(B.eval()))
我得到这样的印刷品:
A=[[ 0.59019732 -0.68919742 3.13932252]
[-2.62436795 1.91452241 6.34897995]]
B=[[ 10.35036469 -0.78370452]
[ 2.15025043 5.39917326]
[ 3.15622997 -4.52096176]]
B值来自哪里?如果我运行相同的但是将A张量初始化为一个常数值,整数张量,我看到转置符合预期......我在哪里错了?
编辑:使用下面接受的答案提供的解决方法(谢谢!),当代码片段被修改时,这可以正常工作:
with tf.Session() as test:
...: tf.set_random_seed(1)
...: A = tf.random_normal([2,3],mean=1,stddev=4)
...: B = tf.transpose(A)
...: print(test.run([A,B]))
答案 0 :(得分:3)
tensorflow
分组功能,每当请求运行时,它都会运行该运行所需的所有操作。
现在,当您第一次执行A.eval()
时,tensorflow会发现需要使用随机数对其进行初始化,以便输出答案并执行此操作。现在,当它看到B.eval()
时,它会发现它需要A
的值来评估B
,并且它需要使用随机变量初始化A
,因此,第二次运行时,不同的随机变量被分配给A
。
要解决此问题,请在一次运行中同时评估A
和B
A_out, B_out = sess.run([A, B])