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

为何设置seed后tf.random_uniform仍返回不同结果?

问题解答

在TensorFlow旧版本的计算图模式里,probability_all不是存储固定值的容器,而是一个生成随机数的操作节点。

每次调用.eval()(和sess.run(probability_all)作用完全一致),都会触发这个节点执行一次,重新生成一组随机数。

你设置的seed=11是用来固定随机数生成器的初始状态,它能保证同一会话里按相同顺序执行这个节点时,生成的随机数序列是固定的,但不是每次调用都返回同一个值——第一次调用取序列里的前5个值,第二次取接下来的5个,第三次再取后面的5个,所以三次结果不一样。

如果想每次调用都拿到相同结果,有两种常用方法:

  • 把生成的随机数存入变量,初始化后就不再重新生成:
batch_size = 5
probability_all = tf.random_uniform((batch_size,), minval=0.0, maxval=1.0, dtype=tf.float32, seed=11)
prob_var = tf.Variable(probability_all)
with tf.Session() as sess:           
    sess.run(tf.global_variables_initializer())
    print(prob_var.eval())
    print(prob_var.eval())
    print(prob_var.eval())
  • 先执行一次把结果存到普通变量里,之后重复打印这个变量:
batch_size = 5
probability_all = tf.random_uniform((batch_size,), minval=0.0, maxval=1.0, dtype=tf.float32, seed=11)
with tf.Session() as sess:           
    prob_val = probability_all.eval()
    print(prob_val)
    print(prob_val)
    print(prob_val)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:09