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函数式编程
Jun 09 Python
Python获取文件ssdeep值的方法
Oct 05 Python
浅谈MySQL中的触发器
May 05 Python
python中函数传参详解
Jul 03 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 Python
python 猴子补丁(monkey patch)
Jun 26 Python
numpy中的meshgrid函数的使用
Jul 31 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python和js交互调用的方法
Jun 23 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
python map比for循环快在哪
2020/09/21 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
shell变量的作用空间是什么
2013/08/17 面试题
档案接收函范文
2014/01/10 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
安全承诺书格式范本
2015/04/28 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python