一、 说明
random.seed()函数是numpy.random的常用函数,确定随机数生成器的种子,可以保证生成的随机数具有可预测性,使多次生成的随机数相同,可以在调用其他随机模块函数之前调用此函数。
- 如果使用相同的seed( )值,则每次生成的随即数都相同;
- 如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
在机器学习和深度学习中,如果要保证部分参数(比如W权重参数)的随机初始化值相同,可以采用这种方式来实现。
二、 问题
对于seed()的使用,会有以下疑问:
- 利用随机数种子,保证生成的随机数具有可预测性。怎么理解?
- random.seed(x),随机数种子x的参数怎么选择?
三、 使用
1.语法
import numpy as np
random.seed ( x ) #x为非负整数
2.示例说明
多次运行以下python代码
import numpy as np
if __name__ == '__main__':
i = 0
np.random.seed(0)
while(i < 3):
print("\n\r1.定义seed(0)数组{}:".format(i), np.random.randn(1, 5))
i += 1
i = 0
print("---------------------------------")
j = 0
while(j < 3):
print("\n\r2.未定义seed()数组{}:".format(j), np.random.randn(1, 5))
j += 1
print("---------------------------------")
np.random.seed(3)
m = 0
while(m < 3):
print("\n\r3.定义seed(3)数组{}:".format(m), np.random.randn(1, 5))
m += 1
print("---------------------------------")
np.random.seed(0)
n = 0
while(n < 3):
print("\n\r4.再次定义seed(0)数组{}:".format(n), np.random.randn(1, 5))
n += 1
每次每个数组生成的结果一样
1.定义seed(0)数组0: [[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
1.定义seed(0)数组1: [[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
1.定义seed(0)数组2: [[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
---------------------------------
2.未定义seed()数组0: [[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]]
2.未定义seed()数组1: [[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
2.未定义seed()数组2: [[-1.45436567 0.04575852 -0.18718385 1.53277921 1.46935877]]
---------------------------------
3.定义seed(3)数组0: [[ 1.78862847 0.43650985 0.09649747 -1.8634927 -0.2773882 ]]
3.定义seed(3)数组1: [[-0.35475898 -0.08274148 -0.62700068 -0.04381817 -0.47721803]]
3.定义seed(3)数组2: [[-1.31386475 0.88462238 0.88131804 1.70957306 0.05003364]]
---------------------------------
4.再次定义seed(0)数组0: [[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
4.再次定义seed(0)数组1: [[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
4.再次定义seed(0)数组2: [[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
每次生成数组一致,可知:说明加入确定的随机数种子,后面的随机数组都是按一定的顺序生成的,不管运行多少次,结果数组都相同
对比1和2,可知:随机数种子对后面的结果一直有影响
对比1和3,可知:不同参数生成不同系列的随机数
对比1和4,可知:相同参数生成相同系列的随机数,即参数确定,随机数确定
综上所述,random.seed ( x ) 参数x确定随机数数组的生成,参数确定,数组确定,保证生成的随机数具有可预测性,参数为非负整数,其选择不固定,只要保证语句能正常运行即可。
以上为个人整理总结的知识,如有遗漏或错误欢迎留言指出、点评,如要引用,请联系通知,未经允许谢绝转载。