PyTorch学习(7):学习率

2023-05-16

PyTorch学习(7):学习率

  • Pytorch官方文档: https://pytorch-cn.readthedocs.io/zh/latest/
  • Pytorch学习文档: https://github.com/tensor-yu/PyTorch_Tutorial
  • 参考: https://pytorch.org/docs/stable/optim.html?highlight=lr_scheduler
        https://blog.csdn.net/u011995719/article/details/89486359
        https://blog.csdn.net/shanglianlm/article/details/85143614

文章目录

  • PyTorch学习(7):学习率
    • 1.学习率的作用
    • 2.PyTorch学习率
      • 1)PyTorch学习率更新策略伪代码
      • 2)PyTorch学习率调整方法
    • 3.自定义调整学习率
      • 1)根据PyTorch官方LambdaLR自定义
      • 2)自定义函数调整学习率
  • 总结


1.学习率的作用

  梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。学习率(learning rate) 作为优化算法中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
一般在训练初期给予较大的学习率,随着训练的进行,学习率逐渐减小。学习率什么时候减小,减小多少,这都涉及到学习率的调整方法。

2.PyTorch学习率

PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是:
  a. 有序调整: 等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和余弦退火(Cosine Annealing)。
  b. 自适应调整: 自适应调整学习率 ReduceLROnPlateau。
  c. 自定义调整: 自定义调整学习率 LambdaLR。

1)PyTorch学习率更新策略伪代码

scheduler = ...
for epoch in range(100):
    train(...)
    validate(...)
    scheduler.step()

2)PyTorch学习率调整方法

PyTorch官方提供了多种学习率更新方法共大家使用,如下所示:

1)CLASS torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1,
 verbose=False)2)CLASS torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1,
 last_epoch=-1, verbose=False)3)CLASS torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1, 
verbose=False)4)CLASS torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0,
 last_epoch=-1, verbose=False)5)CLASS torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, 
verbose=False)6)CLASS torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=-1, 
verbose=False)7)CLASS torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, 
patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)8)CLASS torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, 
step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1, verbose=False)9)CLASS torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, 
epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=-1, verbose=False)10)CLASS torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, 
eta_min=0, last_epoch=-1, verbose=False)

3.自定义调整学习率

学习率的调整策略,比较常见的还是根据数据集自行定义,如下所示:

1)根据PyTorch官方LambdaLR自定义

scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer,
                lambda step : (1.0-step/args.total_iters) if step <= args.total_iters else 0, last_epoch=-1)
scheduler.step()

2)自定义函数调整学习率

def adjust_learning_rate(optimizer, epoch, args):
    """Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""
    lr = args.lr * (0.1 ** (epoch // 30))
    for param_group in optimizer.param_groups:
        param_group['lr'] = lr

总结

  至此,基于PyTorch的学习率调整策略已有了初步了解,实际应用根据需求自行调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyTorch学习(7):学习率 的相关文章

  • Halcon中count_obj算子及其异常分析

    count obj算子 count obj算子是用来计算输入区域中连通域的个数 更直观的说法是 xff0c 计算Region中有几个单独的区域 一般用在connection算子之后 xff0c 该算子的作用是将输入区域分割成单独的连通域 异
  • Halcon中 reduce_domain算子和crop_domain算子的使用及配合

    1 reduce domain算子 reduce domain span class hljs keyword Image span Region ImageReduced 其中 xff0c span class hljs keyword
  • 卷帘曝光和全局曝光的差别

    全局曝光和卷帘曝光是常见的相机曝光方式 一般来说 xff0c CCD相机是全局曝光 xff0c 而CMOS相机则存在卷帘曝光 那么 xff0c 这两种方式孰优孰劣呢 xff1f 或者说 xff0c 他们两者的差别在哪里呢 xff1f 那么
  • 自动化设备的软件框架

    自动化设备的软件主要由2部分组成 xff1a 1是运动控制部分的软件实现 xff0c 2是上位机处理数据并显示结果的软件实现 运动控制的实现 第1部分的实现主要有2种方式 xff0c 一种是用板卡控制的方式 xff0c 一种是用PLC控制的
  • Halcon中两种实现旋转的方法rotate_image和affine_trans_image

    Halcon中实现旋转的方式由两种 一种是rotate image xff0c 该方式实现简单 xff0c 但只能绕中心旋转 二是affine trans image xff0c 该方式实现较复杂 xff0c 但是可以实现绕任意位置的旋转
  • 一文搞定深度学习入门级电脑硬件配置

    对于刚接触深度学习的学友而言 xff0c 可能都会碰到电脑配置的问题 xff0c 比如显卡型号 内存容量 处理器型号等 好的电脑配置 xff0c 比如GPU加速的显卡 xff0c 是能够有效缩短算法的训练时间的 xff0c 这能让人尽快的看
  • 一文详解numpy中np.nonzero()函数

    np nonzero函数是numpy中用于得到数组array中非零元素的位置 xff08 数组索引 xff09 的函数 一般来说 xff0c 通过help xff08 np nonzero xff09 能够查看到该函数的解析与例程 但是 x
  • Matlab笔记:将列向量直接赋值给行向量

    在别人的matlab代码中看到 xff0c 将列向量赋值给行向量 最初还以为是别人的代码有bug xff0c 实际上运行后才发现是由自己的无知造成的 因此 xff0c 将如下一小段测试的代码贴出来 xff0c 向量的维度由左值 xff08
  • 使用已训练好的caffe模型的步骤

    如何使用生成的模型 xff0c 可能是在训练好模型之后 xff0c 需要考虑的问题 实际上 xff0c caffe是存在两种接口来进行调用模型 xff1a 1种是基于python的 xff0c 另一种则是基于c 43 43 的 我个人是倾向
  • 怎么开发爬虫软件?

    怎么开发爬虫软件 xff1f 来自 ITPUB博客 xff0c 链接 xff1a http blog itpub net 69941520 viewspace 2650981 xff0c 如需转载 xff0c 请注明出处 xff0c 否则将
  • 来聊聊ios下的url缓存问题

    一 关于同一个url的多次请求 有时候 xff0c 对同一个URL请求多次 xff0c 返回的数据可能都是一样的 xff0c 比如服务器上的某张图片 xff0c 无论下载多少次 xff0c 返回的数据都是一样的 01220830391450
  • openstack ovs-vswitch收包流程

    数据包从物理网卡进入虚拟机的流程 物理网卡处理 NIC 收到数据包 xff0c 会先将高低电信号转换到网卡 FIFO 存储器 NIC 首先申请 Ring buffer 的描述 xff0c 根据描述找到具体的物理地址 xff0c NIC 会使
  • 9个常用的Shell脚本

    1 Dos 攻击防范 xff08 自动屏蔽攻击 IP xff09 bin bash DATE 61 date 43 d b Y H M LOG FILE 61 usr local nginx logs demo2 access log AB
  • google breakpad /qbreakpad 在 arm移植

    google breakpad qbreakpad 在 arm移植 breakpad在arm linux上移植 xff0c 集成到qt中生成qbreakpad 参考文档 xff1a Google Breakpad 之一 xff0c 跨平台c
  • 无限递归(与无限循环一样)

    public int sumByMax int max if max lt 61 2 return max 43 sumByMax max 1 else return max
  • [leetcode] Maximum Split of Positive Even Integers

    Maximum Split of Positive Even Integers You are given an integer finalSum Split it into a sum of a maximum number of uni
  • [flask]基础知识

    Flask 基础知识 基本框架结构 span class token keyword from span flask span class token keyword import span Flask span class token k
  • 解决mybatis 报错java.lang.UnsupportedOperationException

    解决mybatis中mapper xml 报错java lang UnsupportedOperationException 主要是mapper xml里中的select语句对应的 resultType应该为对应的实体类 比如 xff0c
  • 用Python计算北京地铁的两站间最短换乘路线

    用Python计算北京地铁的两站间最短换乘路线 地铁数据 地铁数据用字典表示 xff1a station neighbor1 line number neighbor2 line number station2 现在我们有地铁的站名 xff
  • [笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

    python数据结构之线性表 python内置了很多高级数据结构 xff0c list xff0c dict xff0c tuple xff0c string xff0c set等 xff0c 在使用的时候十分舒心 但是 xff0c 如果从

随机推荐