为何设置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
相关产品推荐
相关产品推荐

