pytorch 确保结果可复现笔记

在使用pytorch进行深度神经网络学习时,遇到了代码不能复现的情况,很是令人烦恼,经过一番实验,找到了一种设置方法。都说设置随机种子就能解决,但有的代码即使设置了随机种子,一些pytorch代码在CPU上运行能得到一致的结果,使用cuda版pytorch在GPU多次运行结果依旧不一样,后来网查查发现,有些pytorch算法cuda没有支持确定性实现。另外有网友建议不要使用torchvision,torchvision有些缺件还是蛮好用的。

当前的随机种子设置为:

import random
manualSeed = 1
random.seed(manualSeed)
np.random.seed(manualSeed)
torch.manual_seed(manualSeed)
torch.cuda.manual_seed(manualSeed)
torch.cuda.manual_seed_all(manualSeed)
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True

# 这么设置使用确定性算法,如果代码中有算法cuda没有确定性实现,则会报错,可以验证代码中有没有cuda没有确定性实现的代码
# torch.use_deterministic_algorithms(True)
# 这么设置使用确定性算法,如果代码中有算法cuda没有确定性实现,也不会报错
torch.use_deterministic_algorithms(True, warn_only=True)

os.environ['CUBLAS_WORKSPACE_CONFIG']=':4096:8'

注:虽然部分算法没有cuda确定性实现,但是用CUDA训练比CPU训练快太多了,平常基本还是要用CUDA训练,虽然训练结果不能保证完全一样,但是设置随机种子后,初始化的参数一样,结果应该也不会差太多。

参考文献:

1.pytorch官网 REPRODUCIBILITY

2.Set warning or error with use_deterministic_algorithms #64883

3.RuntimeError: adaptive_max_pool2d_backward_cuda does not have a deterministic implementation……报错

4.知乎 pytorch如何确保 可重复性/每次训练结果相同(固定了随机种子,为什么还不行)?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值