1、python seed
参考:http://www.runoob.com/python/func-number-seed.html
描述
seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。
语法
以下是 seed() 方法的语法:
import random
random.seed ( [x] )
注意:seed(()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
参数
x – 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
返回值
本函数没有返回值。
实例
以下展示了使用 seed(() 方法的实例:
import random
random.seed( 10 )
print("Random number with seed 10 : ", random.random())
# 生成同一个随机数
random.seed( 10 )
print("Random number with seed 10 : ", random.random())
# 生成同一个随机数
random.seed( 10 )
print("Random number with seed 10 : ", random.random())
random.seed( 9 )
print("Random number with seed 10 : ", random.random())
以上实例运行后输出结果为:
Random number with seed 10 : 0.5714025946899135
Random number with seed 10 : 0.5714025946899135
Random number with seed 10 : 0.5714025946899135
Random number with seed 10 : 0.46300735781502145
2、tensorflow seed
tensorflow中设置随机种子,可分为两类,图级seed和操作级seed,
- 情况1:当没有设置图级seed和操作级seed时,生成的随机数是随机的
- 情况2:当设置操作级seed时,生成的随机数是同一组随机数,没有设置操作级seed的操作,生成的随机数是随机的
- 情况3:当设置图级seed, 将会生成同一组随机数,如果设置操作级seed又和情况2相同
实例:
import tensorflow as tf
print('情况1:当没有设置图级seed和操作级seed时,生成的随机数是随机的 ')
a = tf.random_uniform([1])
b = tf.random_normal([1])
print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # generates 'A3'
print(sess2.run(a)) # generates 'A4'
print(sess2.run(b)) # generates 'B3'
print(sess2.run(b)) # generates 'B4'
print('情况2:当设置操作级seed时,生成的随机数是同一组随机数,没有设置操作级seed的操作,生成的随机数是随机的 ')
a = tf.random_uniform([1], seed=1)
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'.
print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B3'
print(sess2.run(b)) # generates 'B4'
print('情况3:当设置图级seed, 将会生成同一组随机数,如果设置操作级seed又和情况2相同')
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'.
print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B1'
print(sess2.run(b)) # generates 'B2'
打印:
情况1:当没有设置图级seed和操作级seed时,生成的随机数是随机的
Session 1
[ 0.33522117]
[ 0.10670769]
[-1.55416799]
[-0.15553159]
Session 2
[ 0.08545518]
[ 0.59008467]
[-0.24251401]
[-2.70422912]
情况2:当设置操作级seed时,生成的随机数是同一组随机数,没有设置操作级seed的操作,生成的随机数是随机的
Session 1
[ 0.23903739]
[ 0.22267115]
[ 2.52735877]
[-0.62637132]
Session 2
[ 0.23903739]
[ 0.22267115]
[-0.48297331]
[-0.01883096]
情况3:当设置图级seed, 将会生成同一组随机数,如果设置操作级seed又和情况2相同
Session 1
[ 0.1211642]
[ 0.41471958]
[-1.76099801]
[-1.82982743]
Session 2
[ 0.1211642]
[ 0.41471958]
[-1.76099801]
[-1.82982743]