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中的高级函数map/reduce使用实例
Apr 13 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
import的本质解析
Oct 30 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
python async with和async for的使用
Jun 20 Python
python3使用GUI统计代码量
Sep 18 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
python实现双人五子棋(终端版)
Dec 30 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
url decode problem 解决方法
2011/12/26 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
python类装饰器用法实例
2015/06/04 Python
Python实现自动发送邮件功能
2021/03/02 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Python中的集合介绍
2019/01/28 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
python 模块导入问题汇总
2021/02/01 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
本科生详细的自我评价
2013/09/19 职场文书
慈善募捐倡议书
2015/04/27 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
vue组件vue-esign实现电子签名
2022/04/21 Vue.js