首页 > 解决方案 > “tf.subtract”的结果与预期的不一样

问题描述

import tensorflow as tf
a=tf.random_normal([3, 2], mean=6, stddev=0.1, seed=1)
b=tf.random_normal([3, 2], mean=1, stddev=1, seed=1)
sess=tf.Session()
ra=sess.run(a)
rb=sess.run(b)
r1=ra-rb
r2=sess.run(tf.subtract(a,b))

为什么是r1r2不相等?理论上不应该一样吗?</p>

张量流版本:1.15.0

标签: tensorflow

解决方案


因为在Tensorflow 1.x每个中都会session生成tf.random_normal一组新的数字,这是@xdurch0 和@Addy 在评论部分正确提到的结果变化的原因。相反,您可以使用和比较结果
来设置常数。tf.constant

张量流 1.x:

将张量流导入为 tf

a = tf.constant([[5.918868 , 6.14846  ],
       [6.006533 , 5.7557297],
       [6.009925 , 6.0591226]])
b = tf.constant([[0.32409406, 1.2866583 ],
       [1.3215888 , 2.2124639 ],
       [0.19414288, 0.86650544]])
sess=tf.Session()
ra=sess.run(a)
rb=sess.run(b)
r1=ra -rb
r2=sess.run(tf.subtract(a,b))
print(r1)
print(r2) 

结果:

[[5.5947742 4.8618016]
 [4.684944  3.5432658]
 [5.815782  5.192617 ]]
[[5.5947742 4.8618016]
 [4.684944  3.5432658]
 [5.815782  5.192617 ]] 

张量流 2.x:

由于Tensorflow 2.x默认情况下启用了急切执行,因此tf.random.normal将立即执行并将结果保留给其余代码。

import tensorflow as tf
a=tf.random.normal([3, 2], mean=6, stddev=0.1, seed=1)
b=tf.random.normal([3, 2], mean=1, stddev=1, seed=1)
r1=a-b
r2=tf.subtract(a,b)
print(r1)
print(r2)

结果:

tf.Tensor(
[[5.5947742 4.8618016]
 [4.684944  3.5432658]
 [5.815782  5.192617 ]], shape=(3, 2), dtype=float32)
tf.Tensor(
[[5.5947742 4.8618016]
 [4.684944  3.5432658]
 [5.815782  5.192617 ]], shape=(3, 2), dtype=float32)

推荐阅读