Pytorch实现warm up和consine decay

这篇具有很好参考价值的文章主要介绍了Pytorch实现warm up和consine decay。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在深度学习领域,模型训练过程中的不稳定性是一个常见的问题。为了解决这个问题,在Resnet这篇论文也提及了Warm Up的方法,通过逐渐增加学习率,引导模型在训练初期更稳定地收敛。同时在warm up之后结合consine decay的方法让训练变得更有效。

warm up和consine decay的意义

  • warm up来自于这篇文章:https://arxiv.org/pdf/1706.02677.pdf
  • consine decay来自于这篇文章:https://arxiv.org/pdf/1812.01187.pdf

在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。
当训练了一段时间(比如两轮、三轮)后,模型已经对每个数据点看过几遍了,或者说对当前的batch而言有了一些正确的了解,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。这个过程就可以看做是warmup。
那么为什么之后还要decay呢?当模型训到一定阶段后(比如10个epoch),模型的分布就已经比较固定了,或者说能学到的新东西就比较少了。如果还沿用较大的学习率,就会破坏这种稳定性,用我们通常的话说,就是已经接近loss的local optimal了,为了靠近这个最低点,我们就要慢慢来。

代码实现

1. 非常简单的前期准备工作

import torch,math
import matplotlib.pyplot as plt

# 定义一个简单的网络
class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear = torch.nn.Linear(1, 1, bias=False)

    def forward(self, x):
        return self.linear(x)

# 声明一些超参数
epochs = 100000
warm_up_epochs = epochs*0.3
milestones = [epochs*0.3, epochs*0.7]

# 优化器
optimizer = torch.optim.SGD(model.parameters(), 0.1, momentum=0.9, weight_decay=5e-4)

2. 设置scheduler调度器


# MultiStepLR without warm up
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=milestones, gamma=0.1)

# warm_up_with_multistep_lr
warm_up_with_multistep_lr = lambda epoch: epoch / warm_up_epochs if epoch <= warm_up_epochs else 0.1**len([m for m in milestones if m <= epoch])
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=warm_up_with_multistep_lr)

# warm_up_with_cosine_lr
warm_up_with_cosine_lr = lambda epoch: epoch / warm_up_epochs if epoch <= warm_up_epochs else 0.5 * ( math.cos((epoch - warm_up_epochs) /(epochs - warm_up_epochs) * math.pi) + 1)
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=warm_up_with_cosine_lr)

上面的三段代码分别是:

  1. 不使用warm up + multistep learning rate 衰减
  2. 使用warm up + multistep learning rate 衰减
  3. 使用warm up + consine learning rate衰减

代码均使用pytorch中的torch.optim.lr_scheduler.LambdaLR自定义学习率衰减器

3. 模拟训练过程

lrs = []
for item in range(epochs):
    lr = optimizer.param_groups[0]["lr"]
    optimizer.zero_grad()
    optimizer.step()
    scheduler.step()
    lrs.append(scheduler.get_last_lr())
   
plt.plot(range(epochs),lrs)
plt.show()

结果

1. MultiStepLR without warm up

Pytorch实现warm up和consine decay,学习笔记,pytorch,人工智能,python

2. warm_up_with_multistep_lr

Pytorch实现warm up和consine decay,学习笔记,pytorch,人工智能,python

3. warm_up_with_cosine_lr

Pytorch实现warm up和consine decay,学习笔记,pytorch,人工智能,python文章来源地址https://www.toymoban.com/news/detail-554555.html

参考

  1. https://pytorch.org/docs/stable/nn.html
  2. 知乎 https://zhuanlan.zhihu.com/p/148487894
  3. 知乎 https://zhuanlan.zhihu.com/p/424373231

到了这里,关于Pytorch实现warm up和consine decay的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AI】《动手学-深度学习-PyTorch版》笔记(九):从零开始实现线性回归的训练

    在深度学习中,用来训练的数据集通过标注来实现。 咱们在这一步使用函数来生成一组数据集 定义数据生成函数:synthetic_data

    2024年02月14日
    浏览(43)
  • 【深度学习】学习率预热和学习率衰减 (learning rate warmup & decay)

    在深度学习中学习率这个超参数,在选取和调整都是有一定策略的,俗称炼丹。有时我们遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的。 神经网络在刚开始训练的时候模型的权重(weights)是随机初始化的,选择一个较大的学习率,可能带来模型的不稳定(振荡),因

    2023年04月25日
    浏览(38)
  • Pytorch深度学习 - 学习笔记

    dir() :打开,看见包含什么 help() :说明书 pytorch中读取数据主要涉及到两个类 Dataset 和 Dataloader 。 Dataset可以将可以使用的数据提取出来,并且可以对数据完成编号。即提供一种方式获取数据及其对应真实的label值。 Dataloader为网络提供不同的数据形式。 Dataset Dataset是一个抽

    2024年02月07日
    浏览(45)
  • 《Python深度学习基于Pytorch》学习笔记

    有需要这本书的pdf资源的可以联系我~ 这本书不是偏向于非常详细的教你很多函数怎么用,更多的是交个基本使用,主要是后面的深度学习相关的内容。 1.Numpy提供两种基本的对象:ndarray(n维数组对象)(用于储存多维数据)和ufunc(通用函数对象,用于处理不同的数据)。

    2024年02月09日
    浏览(42)
  • Pytorch学习笔记(模型训练)

    在同一个包下创建 train.py 和 model.py ,按照步骤先从数据处理,模型架构搭建,训练测试,统计损失,如下面代码所示 train.py model.py 运行 train.py 后可以通过启动tensorboard进行查看我们的loss情况,损失是不断下降的。 补充 argmax 函数的使用 我们模型预测处理的是概率,我们需

    2024年02月07日
    浏览(46)
  • pytorch学习笔记(十)

    举个例子 比如说根据Loss提供的信息知道,解答题太弱了,需要多训练训练这个模块。 Loss作用:1.算实际输出和目标之间的差距 2.为我们更新输出提供一定的依据(反向传播) 看官方文档 每个输入输出相减取平均取绝对值再取平均 (差的绝对值取平均) 需要注意输入输出

    2024年01月22日
    浏览(39)
  • Pytorch学习笔记-(xiaotudui)

    安装Ancona工具 安装python语言 安装pycharm工具 以上工作安装完成后,开始真正的pytorch安装之旅,别担心,很容易 1.打开Ancona Prompt创建一个pytorch新环境 后面步骤都是y同意安装 2.激活环境 同样在Ancona Prompt中继续输入如下指令 3.去pytorch官网找到下载pytorch指令,根据个人配置进行

    2024年02月05日
    浏览(31)
  • pytorch中文文档学习笔记

    先贴上链接 torch - PyTorch中文文档 首先我们需要安装拥有pytorch的环境 conda指令 虚拟环境的一些指令 查看所有虚拟环境 conda info -e 创建新的虚拟环境 conda create -n env_name python=3.6 删除已有环境 conda env remove -n env_name 激活某个虚拟环境 activate env_name 退出某个虚拟环境 deactivate en

    2024年02月09日
    浏览(40)
  • PyTorch学习笔记(二):PyTorch简介与基础知识

      👨‍💻 作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享, 公众号: GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”或➡️点击链接。 🎉 专栏

    2023年04月09日
    浏览(47)
  • pytorch学习笔记——timm库

    当使用ChatGPT帮我们工作的时候,确实很大一部分人就会失业,当然也有很大一部分人收益其中。我今天继续使用其帮我了解新的内容,也就是timm库。毫不夸张的说,Chat GPT比百分之80的博客讲的更清楚更好,仅次于源码。 当提到计算机视觉的深度学习框架时,PyTorch无疑是最

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包