seed()函数

不管是再深度学习还是在其他工作中,相信大家经常会碰到seed()函数,一定有许多同学搞不清楚其作用,传入的参数数值(即seed(num),num对应的数字)应该是多少。下面一一给大家解答。

比较正经的定义

seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同

白话解释

当使用seed(num)函数,且给定同一个num值,获取一个随机数,不管执行多少次,得到的均是同一个数

import numpy as np
np.random.seed(1)
a = np.random.random()
print(a)

如执行上述代码,最终得到的结果如下(在不同的电脑上也是同样的结果,是不是很纳闷,明明取得是随机数,但是运行这段代码都会得到这个结果?甚至开始怀疑random的作用? 下面会逐步解答这一函数的妙处,以及为什么中文名叫做种子函数

0.417022004702574

当先设置一个seed(num),且传入一个给定的num值,对于给定的for序列,尝试打印出一组随机数

import numpy as np
np.random.seed(1)
for i in range(0,5):
    a=np.random.randn()
    print(a)

不管执行多少次,得到的输出均如下

1.6243453636632417
-0.6117564136500754
-0.5281717522634557
-1.0729686221561705
0.8654076293246785

改变循环迭代次数分别输出3个数和8个数

1.6243453636632417
-0.6117564136500754
-0.5281717522634557
1.6243453636632417
-0.6117564136500754
-0.5281717522634557
-1.0729686221561705
0.8654076293246785
-2.3015386968802827
1.74481176421648
-0.7612069008951028

是否发现了输出的3个数是8个数的前3个。这个操作就像有一个种子(seed()函数传入的参数),当我们得到这个种子时,不同的人使用它去获得随机数都会得到相同的结果。
也可以这样理解,在随机数这块,那些随机数每次并不是真正地随机生成,而是已经早已存在并且有对应的排列,如果我们利用seed(num)函数,且num=None(即不给一个数值),才会在这些已经给定的随机数中随机选择一个,若给定了一个num值,相当于给定了一个起始点,每次从这个起始点出发,顺着往后取值,将得到相同的数。

所以这到底有什么作用呢?

seed(num) 在一些论文代码中常见,想想,如果不同的人编写代码去初始化模型的参数,而在模型学习的过程中,主要采用一些梯度下降的方法来对模型的参数进行优化,具有一定的随机性。同时模型参数的初始值也对模型的性能有着较大的影响,初始值选取的好模型能够迅速收敛,为了减少复现原作者论文代码带来的随机性,通常会采用相同的种子编码来获得相同的初始值。

  • 21
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值