You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TensorFlow无参数@tf.function设置固定随机种子无效?

为什么带参数的@tf.function函数随机结果一致,无参数的却不同?

测试代码

tf.random.set_seed(1234)

@tf.function
def g(i):
  print("round", i)
  return tf.random.uniform([1])

@tf.function
def f():
  return tf.random.uniform([1])

print(g(0))
print(g(1))
print(f())
print(f())

执行输出

round 0
tf.Tensor([0.13047123], shape=(1,), dtype=float32)
round 1
tf.Tensor([0.13047123], shape=(1,), dtype=float32)
tf.Tensor([0.5380393], shape=(1,), dtype=float32)
tf.Tensor([0.3253647], shape=(1,), dtype=float32)

原因解析

  • 带参数的函数g:@tf.function会根据输入参数的类型或值决定是否重新追踪函数并构建新计算图。调用g(0)和g(1)时,传入的参数不同,会触发两次独立的图追踪过程。每次追踪都会基于你设置的全局随机种子1234初始化随机生成器状态,因此两次生成的随机值完全一致,两次打印"round"也证明函数被重新追踪了。
  • 无参数的函数f:第一次调用f()时,@tf.function完成了图的追踪与构建,后续所有调用都会复用这个已构建好的计算图。在TensorFlow图模式中,tf.random.uniform这类随机操作的状态会持久化在图内,每次调用函数时随机生成器的状态会自动推进,所以每次生成的随机值都不一样。

内容的提问来源于stack exchange,提问作者zell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:50:30