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'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值