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的Flask框架来搭建第一个Web应用程序
Jun 04 Python
python实现八大排序算法(1)
Sep 14 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
pandas string转dataframe的方法
Apr 11 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
py-charm延长试用期限实例
Dec 22 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
通过cmd进入python的步骤
Jun 16 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
linux iconv方法的使用
2011/10/01 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
JSON生成Form表单的方法示例
2018/11/21 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
python备份文件的脚本
2008/08/11 Python
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
django中使用POST方法获取POST数据
2019/08/20 Python
pytorch中图像的数据格式实例
2020/02/11 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
酷瑞网络科技面试题
2012/03/30 面试题
办公室驾驶员岗位职责
2013/11/15 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
师德演讲稿范文
2014/05/06 职场文书
经济类毕业生求职信
2014/06/26 职场文书
地方白酒代理协议书
2014/10/25 职场文书
2014年加油站工作总结
2014/12/04 职场文书
被告答辩状范文
2015/05/22 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python