转载自: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)