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类继承与子类实例初始化用法分析
Apr 17 Python
python将字符串转换成数组的方法
Apr 29 Python
基于python中的TCP及UDP(详解)
Nov 06 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python Opencv将图片转为字符画
Feb 19 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
python梯度下降法的简单示例
Aug 31 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
python常用排序算法的实现代码
Nov 08 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
详谈PHP编码转换问题
2015/07/28 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
javascript 避免闭包引发的问题
2009/03/17 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
生产车间实习自我鉴定
2013/09/23 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
开业庆典答谢词
2014/01/18 职场文书
五好党支部事迹材料
2014/02/06 职场文书
信访工作经验交流材料
2014/05/23 职场文书
社区文明倡议书
2015/04/28 职场文书
不同意离婚答辩状
2015/05/22 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python