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

为何TensorFlow的random.truncated_normal同种子返回不同结果?

为什么两次调用tf.random.truncated_normal(seed=1234)结果不同?

核心原因

你设置的seed是操作级种子,它的作用是保证单个随机操作在不同环境(比如不同机器、不同会话)下的可复现性,而非让每次调用该函数都输出相同结果。

每次调用tf.random.truncated_normal(seed=xxx)时,TensorFlow都会在默认图中创建一个新的随机数生成器实例。哪怕seed相同,每个实例的内部状态是独立推进的,所以两次调用会生成不同的随机数序列。


实现两次输出相同结果的方法

有两种可靠的方式:

方法1:设置全局种子

通过全局种子固定整个TensorFlow运行环境的随机数生成状态,所有随机操作都会基于同一个全局状态生成序列:

import tensorflow as tf
tf.random.set_seed(1234)  # 固定全局种子
print(tf.random.truncated_normal(shape=[2]))
print(tf.random.truncated_normal(shape=[2]))

执行后两次输出会完全一致。

方法2:复用随机数生成器对象

创建一个固定种子的生成器实例,通过控制生成器的状态来复现结果:

import tensorflow as tf
# 创建带固定种子的生成器
rng = tf.random.Generator.from_seed(1234)
# 第一次生成
print(rng.truncated_normal(shape=[2]))
# 重置生成器状态到初始种子
rng.reset_from_seed(1234)
# 第二次生成,结果和第一次一致
print(rng.truncated_normal(shape=[2]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:57