PyTorch设置随机数种子使实验结果可复现

琢磨了很久,终于解决了实验可复现的问题,截图留个纪念。
PyTorch设置随机数种子使实验结果可复现_第1张图片

解决方案:

pytorch版本:1.9
python版本:3.8
由于pytorch版本更新,增加了很多需要固定的随机因素。

1.设置随机种子

# 可直接调用此函数
def set_seed(seed=0):
    print('seed = {}'.format(seed))
    os.environ['PYTHONHASHSEED'] = str(seed)
    # 使用lstm需要添加下述环境变量为:16:8,如果cuda版本为10.2,去百度一下应该将环境变量设为多少。
    os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":16:8"
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)  # if you are using multi-GPU.
    # torch.backends.cudnn.benchmark = True
    # use_deterministic_algorithms用于自查自己的代码是否包含不确定的算法,报错说明有,根据报错位置查询并替代该处的算法。1.8之前的版本好像没有此方法。
    torch.use_deterministic_algorithms(True)
    torch.backends.cudnn.enabled = False
    torch.backends.cudnn.benchmark = False
    torch.backends.cudnn.deterministic = True

2.设置dataloader

# 这部分不要动,官方给的。。。
def seed_worker(worker_id):
    worker_seed = torch.initial_seed() % 2 ** 32
    np.random.seed(worker_seed)
    random.seed(worker_seed)

train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                           pin_memory=True,
                                           batch_size=args.batch_size,
                                           shuffle=True,
                                           num_workers=args.num_workers,
                                           drop_last=True,
                                           # 此处添加seed,不需要括号哦,问为什么,我也不晓得
                                           worker_init_fn=seed_worker)

——————————————————————————————————————
注意:把其他部分的cuda加速或者随机种子代码删掉,版本不匹配无法使用上述代码那就重装一下pytorch。
——————————————————————————————————————

ending!!!

你可能感兴趣的:(深度学习,pytorch,python,深度学习)