Pytorch设置random.seed()随机种子

本文探讨了随机种子在PyTorch、NumPy和Python中random模块的作用,以及如何在多线程环境下设置随机种子来确保实验结果的可重复性。文章详细解释了在导入文件前后设置随机种子的影响,并提供了在PyTorch中使用torch.manual_seed和torch.cuda.manual_seed等函数的具体示例。

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

转载自:https://blog.csdn.net/qq_16234613/article/details/81356876,本文只做个人记录学习使用,版权归原作者所有。

测试:

这里写图片描述这里写图片描述

这里写图片描述

可以看到random.seed()对于import的文件同样有用。而且当你设置一个随机种子时,接下来的随机算法生成数可按照当前的随机种子按照一定规律生成。也就是一个随机种子就能重现随机生成的序列。

这里写图片描述这里写图片描述

这里写图片描述

当随机种子设置在b文件import a之后,seed种子无法对之前的随机算法产生作用。

这里写图片描述这里写图片描述

这里写图片描述

随机种子在设置时到下一次设置时。要想重复实验结果,设置同样随机种子即可。

这里写图片描述这里写图片描述

这里写图片描述

在b.py import a之前设置随机种子将会对a同样产生影响。

关于Pytorch:

torch.manual_seed(7) #cpu
torch.cuda.manual_seed(7) #gpu

np.random.seed(7) #numpy
random.seed(7) # random and transforms
torch.backends.cudnn.deterministic=True #cudnn

# After creating the workers, each worker has an independent seed that is initialized to 
# the current random seed + the id of the worker
def worker_init_fun(worker_id)
    np.random.seed(7+worker_id)

train_loader=torch.utils.data.DataLoader(train_dataset,
                                         batch_size=arg.batch_size,
                                         shuffle=True,
                                         num_workers=args.workers,
                                         pin_memory=True,
                                         worker_init_fn=worker_init_fn)

valid_loader=torch.utils.data.DataLoader(val_dataset,
                                         batch_size=arg.batch_size,
                                         shuffle=False,
                                         num_workers=args.workers,
                                         pin_memory=True,
                                         worker_init_fn=worker_init_fn)

def worker_init_fn(worker_id):
    np.random.seed(np.random.get_state()[1][0]+workder_id)

关于numpy:np.random.get_state()函数(转载自:https://blog.csdn.net/Strive_For_Future/article/details/81210907

state=np.random.get_state()

功能:获取随机生成器np.random的状态

作用:常与np.random.set_state()搭配使用,使随机生成器random保持相同的状态。

备注:具有相同state的随机生成器(random)的随机效果相同。随机生成器random,每秩性一次,random的状态(state)就会变化一次,所以每次产生的随机数都不同,或随机操作的效果都不同。而当random的状态(state)不变时,多次秩性random的同一操作具有相同的效果。

示例1:通过设置相同的state使得两次生成的随机数相同

import numpy as np

state=np.random.get_state()
chance=np.random.randint(100)
np.random.set_state(state)
chance2=np.random.ranint(100)
print(chance,chance2)

示例2:通过设置相同的state,使得random.shuffle以相同的规律打乱两个列表,进而使得两个列表被打乱后,仍能保持两个列表间元素的一一对应关系。这一点在深度学习的标注数据集的打乱过程中很有用。对应的image_list和label_list在分别被打乱后,仍能维持一一对应的关系。

import numpy as np

images_list=[1,2,3,4,5,6,7,8,9]
labels_list=[1,2,3,4,5,6,7,8,9]

state=np.random.get_state()
np.random.shuffle(images_list)
np.random.set_state(state)
np.random.shuffle(labels_list)

print(images_list)
print(labels_list)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值