python-为什么 tf.random.uniform 会在函数内部而不是在主程序中生成重复项?
我是 TensorFlow 的新手,我试图了解种子生成的工作原理(主要是函数),我的困惑是如果我在我的主程序中运行这段代码:
a = tf.random.uniform([1], seed=1)
b = tf.random.uniform([1], seed=1)
print(a)
print(b)
我得到这个输出
tf.Tensor([0.2390374], shape=(1,), dtype=float32)
tf.Tensor([0.22267115], shape=(1,), dtype=float32)
两个不同的张量(显然),但如果我尝试从一个函数中调用它:
@tf.function
def foo():
a = tf.random.uniform([1], seed=1)
b = tf.random.uniform([1], seed=1)
print(a)
print(b)
return a, b
foo()
我明白了:
Tensor("random_uniform/RandomUniform:0", shape=(1,), dtype=float32)
Tensor("random_uniform_1/RandomUniform:0", shape=(1,), dtype=float32)
(<tf.张量:shape=(1,), dtype=float32, numpy=array([0.2390374], dtype=float32)>,
<tf.Tensor: shape=(1,), dtype=float32, numpy=array([0.2390374] , dtype=float32)>)
有两件事我不明白:
为什么函数内部的两个打印显示从函数的返回值到打印的输出不同,换句话说,为什么前两行与后两行相比没有显示值(numpy=array ...)?
为什么是a和b平等的?