tf.set_random_seed到底是怎么影响随机值的?

不管有没有通过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'

你可能感兴趣的:(Tensorflow,set_random_seed)