不管有没有通过tf.set_random_seed
设置随机种子,在同一Session中随机函数产生的变量在多次sess.run()
的时候值都是不同的。
有没有设置随机种子控制的是不同Session中运行sess..run()
得到的随机值是相同还是不同。如果在计算图中统一设置随机种子,则在不同Session中得到的随机值是相同的;如果只对某个变量设置随机种子则该变量在不同Session中得到的随机值是相同的;如果不设置随机种子则变量在不同Session中得到的随机数都是不同的。
注:随机数的产生方法可参考tf.Variable变量初始化中相关章节。
没有通过set_random_seed()
来控制随机数种子,每次运算结果都不同,不管是同一Session中还是不同Session中。
import tensorflow as tf
a = tf.random_uniform([1])
b = tf.random_normal([1])
with tf.Session() as sess1:
print("Session 1")
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
with tf.Session() as sess2:
print("Session 2")
print(sess2.run(a)) # generates 'A3'
print(sess2.run(a)) # generates 'A4'
print(sess2.run(b)) # generates 'B3'
print(sess2.run(b)) # generates 'B4'
# 可能的输出:(a和b每次值都不同)
'''
[0.80351377]
[0.7395412]
[-0.96515685]
[0.695868]
[0.12541497]
[0.11067843]
[-2.4589868]
[0.4198756]
'''
仅对某个变量设置随机种子,则该变量在不同Session中产生的随机数相同,但同一Session中不同
import tensorflow as tf
# 仅对某个变量设置随机种子,则该变量在不同Session中产生的随机数相同,但同一Session中不同
a = tf.random.uniform([1], seed=1)
# 没有对b设置随机种子,因此b不管是在不同Session中还是在同一Session中都是不同的
b = tf.random.normal([1])
# Repeatedly running this block with the same graph will generate the same
# sequence of values for 'a', but different sequences of values for 'b'.
with tf.Session() as sess1:
print("Session 1")
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
with tf.Session() as sess2:
print("Session 2")
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B3'
print(sess2.run(b)) # generates 'B4'
统一设置随机种子,可产生不同Session中相同的随机数.注意:同一Session中随机数还是不同的
import tensorflow as tf
# 统一设置随机种子,可产生不同Session中相同的随机数.注意:同一Session中随机数还是不同的
tf.set_random_seed(1234)
a = tf.random_uniform([1])
b = tf.random_normal([1])
# Repeatedly running this block with the same graph will generate the same sequences of 'a' and 'b'.
with tf.Session() as sess1:
print("Session 1")
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
with tf.Session() as sess2:
print("Session 2")
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B1'
print(sess2.run(b)) # generates 'B2'