随机种子,random seed,伪随机数

本文解析了Python中随机数生成原理及如何使用随机种子控制随机过程,强调其在算法对比和复现中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

此处讨论的随机种子适用于random模块,numpy,  torch等。我们将以random模块为例。

1.随机数到底怎么生成的

python中的随机数其实是所谓的“伪随机数”,它的生成并不是完全无迹可寻的。伪随机数生成器通过对“某个值”执行系列操作来获得伪随机值。 通常,这“某个值”来自上一个随机数生成器生成的值。 但是,当你新打开一个程序时,没有由上一个伪随机数生成器产生的值,这时系统就会为你定一个初始值(可能根据日期,时间啥的,可以认为是无法被推断的),通过这个值你可以一路往下走。

 

2.为何是“伪随机”

当我们从上图可以看到,值1是由当时的系统环境决定的,那我们是否能控制值1呢?答案是肯定的。

我们可以通过random.seed()这个函数来给值1设置一个值,使得它成为接下来所有值的”种子”

 

让我们来看一下接下来的例子(两个例子都是在python3.x环境下):

当我在windows系统以9001为种子时,多次运行某个伪随机生成器(random.randint),会得到这样一个序列(1, 5, 5,2,10)。

 

当我在linux系统以9001为种子时,多次运行某个伪随机生成器(random.randint),会得到这样一个序列(1, 5, 5,2,10)。

 

通过这个例子我们可以发现

1. 在定下值1(也就是随机种子)后,整个随机序列就已经确定了下来。这就是所谓的“伪”。

2. 请注意上述例子中第五个和第六个伪随机数生成器(random.randint),他们接收的“某个值”都是5,但生成的数却不一样(一个是5,一个是2)。这就是所谓的“随机”

 

3.为何要设置随机种子

假象这样一种情况,我们对拥有随机操作的两个程序完成了A和B两个版本,那如果我们要比较A和B性能的时候,由于程序内部的随机性,我们的直接比较是很难说明问题的。

那如果我们给A,B在程序的开始都设置同一个随机种子,那么比较将很容易进行,又保证了内部的随机操作。

 

这只是一个例子,总的来说,设置随机种子让我们的对比和复现十分直观。

 

4.设置随机种子

import random, torch
import numpy as np

seed = 9001

random.seed(seed)

torch.manual_seed(seed) #CPU
torch.cuda.manual_seed(seed) #GPU

np.random.seed(seed)

 

参考链接:

https://blog.csdn.net/linzch3/article/details/58220569

https://stackoverflow.com/questions/22639587/random-seed-what-does-it-do/22639752#22639752

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值