返回信息流我在训练模型的时候进行了如下设置
```python
manualSeed = 666
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
# torch.backends.cudnn.enabled = False
os.environ['PYTHONHASHSEED'] = str(manualSeed)
# 这么设置使用确定性算法,如果代码中有算法cuda没有确定性实现,则会报错,可以验证代码中有没有cuda没有确定性实现的代码
torch.use_deterministic_algorithms(True)
# 这么设置使用确定性算法,如果代码中有算法cuda没有确定性实现,也不会报错
# torch.use_deterministic_algorithms(True, warn_only=True)
os.environ['PYTHONHASHSEED'] = str(manualSeed)
os.environ['CUBLAS_WORKSPACE_CONFIG']=':16:8'
```
但遇到两个问题:
- 训练集数据、模型、超参数、种子啥的完全一样,但两次独立训练出来的模型权重不一样
- 同一份模型权重,在整个测试集中分别推理其中的20%样本,和推理所有样本,重合的这20%样本推理出来的结果也不一样
我看网上说是cudnn有不确定性因素,请问大佬们谁有相关的经验,求指导~
复现对我的业务场景很重要
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #101331同步于 2023/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
有人遇到过Pytorch LSTM模型无法复现的问题吗
buptocean
2023/11/27镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
测试调用了model.eval()
如果只用linear,训出来的权重就是一样的呀...加了LSTM就不行了
【 在 ctx2333 的大作中提到: 】
: 独立训练权重就是不一样的吧,随机种子和梯度反传没法保证一致;
: 测试调用模型的时候需要model.eval(),这样结果应该就一致了?
有一篇论文叫作Torch.manual_seed(3407) is all you need[bbsemoji55357,56834]
【 在 buptocean 的大作中提到: 】
: 哈哈哈哈3407是什么梗
学习了[ema37]
【 在 houdeboxue 的大作中提到: 】
: 有一篇论文叫作Torch.manual_seed(3407) is all you need