pytorch通过训练结果的复现设置随机种子


Posted in Python onJune 01, 2021

通过设置全局随机种子使得每次的训练结果相同可以复现

def seed_torch(seed=2018):
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.backends.cudnn.deterministic = True

这里我主要讲一下模型在复现结果遇到的一些问题。

首先在固定随机种子之后,每次模型训练出来的结果一定是一样的,如果不相同,那么说明训练过程中一定还有一部分随机性操作没有被固定。

将模型参数保存下来,然后加载模型参数进行测试,如果发现结果和训练过程中得到的结果有差异。

这个时候就需要按照以下步骤进行分析:

1、先改变batchsize,看看实验复现的结果是否会发生变化。如果发生变化就说明batchsize会影响模型推理过程中的参数。

2、检查一下forward中有哪些参数跟batchsize有关,或者是不是代码写错了。比如batchsize就会影响LSTM的模型参数的初始化。

3、最后检查测试集划分batch的时候是否都一样。

test_loader = DataLoader(test_dataset, batch_size=batchsize, shuffle=True, num_workers=4, pin_memory=True)

比如这样一行代码,测试集每次都被打乱了,虽然固定了随机种子,但是这样只能保证第k轮的随机种子是一样的,而第1轮和第10轮的随机种子是不一样的。

这样的话,比如模型在第13个epoch收敛,得到的结果在是第13轮的测试集进行测试的,而模型在加载的时候是在第一轮的测试进行测试的,结果自然有差异。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python CSV模块使用实例
Apr 09 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Python 加密的实例详解
Oct 09 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
Python列表生成式与生成器操作示例
Aug 01 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
python内存管理机制原理详解
Aug 12 Python
python实现一个猜拳游戏
Apr 05 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
javascript prototype 原型链
2009/03/12 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python实现的彩票机选器实例
2015/06/17 Python
详解Python装饰器由浅入深
2016/12/09 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
python xlsxwriter模块的使用
2020/12/24 Python
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
五年级音乐教学反思
2014/02/06 职场文书
党员干部一句话承诺
2014/05/30 职场文书
应届生求职信
2014/05/31 职场文书
新教师岗前培训方案
2014/06/05 职场文书
销售团队口号大全
2014/06/06 职场文书
春游踏青活动方案
2014/08/14 职场文书
2014年工商所工作总结
2014/12/09 职场文书
施工员岗位职责
2015/02/10 职场文书
内勤岗位职责范本
2015/04/13 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书