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

琢磨了很久,终于解决了实验可复现的问题,截图留个纪念。
在这里插入图片描述

解决方案:

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!!!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值