Pytorch -- 代码可复现需要注意的几点问题

最近在写pytorch的程序,遇到了很多问题,总结一下。

1. 定义随机种子rand seed。

常用命令如下:

    random.seed(seed)

    os.environ["PYTHONHASHSEED"] = str(seed)

    numpy.random.seed(seed)

    torch.manual_seed(seed)

    torch.cuda.manual_seed_all(seed)

    torch.backends.cudnn.deterministic = True

这样基本能保证程序每次运行的结果一致,前提是seed相同。

2. 验证(validate) 和测试(test)的时候记得将模型调至验证模式。

所需代码如下:

model.eval()

with torch.no_grad():

3. 模型参数数量的变化会改变模型运行结果,即使变化的参数并没有真正参与学习。

在实验中,我将model中一处并未使用到的GRU从single direction改为bidirection之后,相同输入数据、相同超参数和相同seed的情况下,结果发生了变化。推测原因是模型初始化的时候GRU也参与其中,birectional之后GRU参数量翻倍,所需生成的随机数数量也随之增加。

4. 最重要的一点,在每一个epoch训练结束之后evaluate model performance on validation or testing set, 也会改变模型运行结果。原因是evaluate的过程影响了dataloader中的shuffle,从而使training data出现在batch中的顺序发生变化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值