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

为何tf.random.uniform在函数内生成重复值,主程序中却不会?

TensorFlow随机种子与@tf.function的常见问题解答

疑问1:函数内print的张量输出与返回值打印为何不同?

在被@tf.function装饰的函数中,代码执行分为图构建和图执行两个阶段:

  • 函数内部的print(a)、print(b)是在图构建阶段触发的,此时打印的是符号张量——也就是计算图中的节点定义,仅包含形状、数据类型等元信息,还未进行实际数值计算,因此不会显示numpy数组内容。
  • 函数返回的张量是在图执行阶段生成的,此时TensorFlow会运行计算图得到实际数值,打印时自然会展示对应的numpy数组。

疑问2:为何函数内a和b的值相等?

这是Eager模式与图模式下随机种子机制的差异导致的:

  • 在Eager模式(主程序直接运行代码)中,即便给tf.random.uniform设置相同的seed=1,TensorFlow会自动生成一个隐式全局随机种子,每次调用随机操作时,会结合操作种子与全局种子生成不同的随机序列,因此两次调用得到不同结果。
  • 在@tf.function的图模式中,固定seed=1的tf.random.uniform操作会被固化到计算图中。图模式下的随机数生成是确定性的:只要种子固定,相同的随机操作每次执行都会输出完全一致的数值。所以两次调用tf.random.uniform([1], seed=1)会得到相同的张量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:03:22