pytorch通过训练结果的复现设置随机种子
通过设置全局随机种子使得每次的训练结果相同可以复现
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&pytorch 随机种子的实现
随机数广泛应用在科学研究, 但是计算机无法产生真正的随机数, 一般成为伪随机数. 它的产生过程: 给定一个随机种子(一个正整数), 根据随机算法和种子产生随机序列. 给定相同的随机种子, 计算机产生的随机数列是一样的(这也许是伪随机的原因). 随机种子是什么? 随机种子是针对随机方法而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是基于生成随机数来实现的.在深度学习中,比较常用的随机方法的应用有:网络的随机初始化,训练集的随机打乱等. 随机种子的取值
-
PyTorch 如何设置随机数种子使结果可复现
由于在模型训练的过程中存在大量的随机操作,使得对于同一份代码,重复运行后得到的结果不一致. 因此,为了得到可重复的实验结果,我们需要对随机数生成器设置一个固定的种子. CUDNN cudnn中对卷积操作进行了优化,牺牲了精度来换取计算效率.如果需要保证可重复性,可以使用如下设置: from torch.backends import cudnn cudnn.benchmark = False # if benchmark=True, deterministic will be False cud
-
Pytorch在dataloader类中设置shuffle的随机数种子方式
如题:Pytorch在dataloader类中设置shuffle的随机数种子方式 虽然实验结果差别不大,但是有时候也悬殊两个百分点 想要复现实验结果 发现用到随机数的地方就是dataloader类中封装的shuffle属性 查了半天没有关于这个的设置,最后在设置随机数种子里面找到了答案 以下方法即可: def setup_seed(seed): torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) np.random.seed(seed
-
pytorch通过训练结果的复现设置随机种子
通过设置全局随机种子使得每次的训练结果相同可以复现 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 这里我主要讲一下模型在复现结果遇到的一些问题
-
python设置随机种子实例讲解
对于原生的random模块 import random random.seed(1) 如果不设置,则python根据系统时间自己定一个. 也可以自己根据时间定一个随机种子,如: import time import random seed = int(time.time()) random.seed(seed) 以上知识点和实例非常简单,大家可以测试下,感谢你的学习和对我们的支持.
-
详解PyTorch批训练及优化器比较
一.PyTorch批训练 1. 概述 PyTorch提供了一种将数据包装起来进行批训练的工具--DataLoader.使用的时候,只需要将我们的数据首先转换为torch的tensor形式,再转换成torch可以识别的Dataset格式,然后将Dataset放入DataLoader中就可以啦. import torch import torch.utils.data as Data torch.manual_seed(1) # 设定随机数种子 BATCH_SIZE = 5 x = torch.li
-
pytorch 预训练层的使用方法
pytorch 预训练层的使用方法 将其他地方训练好的网络,用到新的网络里面 加载预训练网络 1.原先已经训练好一个网络 AutoEncoder_FC() 2.首先加载该网络,读取其存储的参数 3.设置一个参数集 cnnpre = AutoEncoder_FC() cnnpre.load_state_dict(torch.load('autoencoder_FC.pkl')['state_dict']) cnnpre_dict =cnnpre.state_dict() 加载新网络 1.设置新的网
-
基于pytorch 预训练的词向量用法详解
如何在pytorch中使用word2vec训练好的词向量 torch.nn.Embedding() 这个方法是在pytorch中将词向量和词对应起来的一个方法. 一般情况下,如果我们直接使用下面的这种: self.embedding = torch.nn.Embedding(num_embeddings=vocab_size, embedding_dim=embeding_dim) num_embeddings=vocab_size 表示词汇量的大小 embedding_dim=embeding
-
PyTorch预训练Bert模型的示例
本文介绍以下内容: 1. 使用transformers框架做预训练的bert-base模型: 2. 开发平台使用Google的Colab平台,白嫖GPU加速: 3. 使用datasets模块下载IMDB影评数据作为训练数据. transformers模块简介 transformers框架为Huggingface开源的深度学习框架,支持几乎所有的Transformer架构的预训练模型.使用非常的方便,本文基于此框架,尝试一下预训练模型的使用,简单易用. 本来打算预训练bert-large模型,发现
-
pytorch DataLoader的num_workers参数与设置大小详解
Q:在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的? train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4) 参数详解: 1.每次dataloader加载数据时:dataloader一次性创建num_worker个worker,(也可以说dataloader一次
-
Pytorch 如何训练网络时调整学习率
为了得到更好的网络,学习率通常是要调整的,即刚开始用较大的学习率来加快网络的训练,之后为了提高精确度,需要将学习率调低一点. 如图所示,步长(学习率)太大容易跨过最优解. 代码如下: 表示每20个epoch学习率调整为之前的10% optimizer = optim.SGD(gan.parameters(), lr=0.1, momentum=0.9, weight_decay=0.0005) lr = optimizer.param_groups[0]['lr'] * (0.1 ** (epo
-
加速 PyTorch 模型训练的 9 个技巧(收藏)
目录 Pytorch-Lightning 1.DataLoaders 2.DataLoaders中的workers的数量 3.Batchsize 4.梯度累加 5.保留的计算图 6.单个GPU训练 7.16-bit精度 8.移动到多个GPUs中 9.多节点GPU训练 10.福利!在单个节点上多GPU更快的训练 对模型加速的思考 让我们面对现实吧,你的模型可能还停留在石器时代.我敢打赌你仍然使用32位精度或GASP甚至只在一个GPU上训练. 我明白,网上都是各种神经网络加速指南,但是一个check
随机推荐
- SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
- PHP+FLASH实现上传文件进度条相关文件 下载
- iOS常用小功能(获得屏幕图像、压缩图片、加边框、调整label的size)
- Python 实现 贪吃蛇大作战 代码分享
- 巧用weui.topTips验证数据的实例
- asp.net html控件的File控件实现多文件上传实例分享
- 分页详解 从此分页无忧(PHP+mysql)
- 如何给phpcms v9增加类似于phpcms 2008中的关键词表
- Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
- Python抓取电影天堂电影信息的代码
- C语言数据结构中二分查找递归非递归实现并分析
- php 批量替换html标签的实例代码
- 清明节是几月几日 清明节的由来
- js 鼠标拖动对象 可让任何div实现拖动效果
- python字典基本操作实例分析
- 基于jquery可配置循环左右滚动例子
- js实现动态创建的元素绑定事件
- Laravel框架实现利用监听器进行sql语句记录功能
- SpringBoot异步方法捕捉异常详解
- 基于C#开发中的那些编码问题(详谈)