numpy之random.seed()的使用

一、 说明

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确定随机数数组的生成,参数确定,数组确定,保证生成的随机数具有可预测性,参数为非负整数,其选择不固定,只要保证语句能正常运行即可。

以上为个人整理总结的知识,如有遗漏或错误欢迎留言指出、点评,如要引用,请联系通知,未经允许谢绝转载。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值