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实现冒泡排序的简单应用示例
Dec 11 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python中logging实例讲解
Jan 17 Python
python aiohttp的使用详解
Jun 20 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
python ubplot使用方法解析
Jan 10 Python
python剪切视频与合并视频的实现
Mar 03 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
Python基础之字符串格式化详解
Apr 21 Python
Python学习之异常中的finally使用详解
Mar 16 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
You might like
一个用于MySQL的PHP XML类
2006/10/09 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Django添加feeds功能的示例
2018/08/07 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
全球最大的服务市场:Fiverr
2017/01/03 全球购物
数控专业应届生求职信
2013/11/27 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
教师自我剖析材料
2014/09/29 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android