python的seed和tensorflow的seed

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]
阅读更多
文章标签: python tensorflow seed
个人分类: python TensorFlow笔记
上一篇TensorFlow之Cifar-10图像分类任务
下一篇卷积神经网络实现猫狗识别
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭