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里对list中的整数求平均并排序
Sep 12 Python
深入理解Python中字典的键的使用
Aug 19 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
Django model反向关联名称的方法
Dec 15 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
Python实现最大子序和的方法示例
Jul 05 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
Python3 assert断言实现原理解析
Mar 02 Python
python制作抽奖程序代码详解
Jan 15 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
Dec 24 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
解析htaccess伪静态的规则
2013/06/18 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
JS 控制CSS样式表
2009/08/20 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
Python编程之属性和方法实例详解
2015/05/19 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
python中的set实现不重复的排序原理
2018/01/24 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
文明家庭先进事迹材料
2014/05/14 职场文书
六查六看剖析材料
2014/10/06 职场文书
关于召开会议的通知
2015/04/15 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
springboot+VUE实现登录注册
2021/05/27 Vue.js