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学习之Anaconda的使用与配置方法
Jan 04 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
python实现定时提取实时日志程序
Jun 22 Python
python 正确保留多位小数的实例
Jul 16 Python
python中使用print输出中文的方法
Jul 16 Python
pycharm 设置项目的根目录教程
Feb 12 Python
如何解决安装python3.6.1失败
Jul 01 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python图片检索之以图搜图
May 31 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php DES加密算法实例分析
2019/09/18 PHP
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
js module大战
2019/04/19 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
python将unicode转为str的方法
2017/06/21 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python双链表原理与实现方法详解
2020/02/22 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
电气个人求职信范文
2014/02/04 职场文书
电大本科自我鉴定
2014/02/05 职场文书
地理教师岗位职责
2014/03/16 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
党课主持词大全
2015/06/30 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python