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解析xml成对应的html示例分享
Apr 02 Python
Python中文件遍历的两种方法
Jun 16 Python
Python标准库之Sys模块使用详解
May 23 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
Python通过文本和图片生成词云图
May 21 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
学会Python数据可视化必须尝试这7个库
Jun 16 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
详解Python编程中基本的数学计算使用
2016/02/04 Python
python学习 流程控制语句详解
2016/06/01 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
2014年教师节活动总结
2014/08/29 职场文书
爱牙日活动总结
2014/08/29 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers