《深度学习》—— 神经网络中的调整学习率

embedded/2024/10/19 7:28:37/

文章目录

  • 一、什么是调整学习率?
  • 二、使用PyTorch中的库函数进行调整学习
    • 三种常用的方法
      • 1. StepLR
      • 2. MultiStepLR
      • 3. CosineAnnealingLR

一、什么是调整学习率?

  • 调整学习率(Adjusting Learning Rate)是在机器学习,特别是在学习>深度学习中,对优化算法中的一个关键超参数进行动态调整的过程。学习率决定了在每一次参数更新时,参数变化的幅度大小。它是控制模型学习速度的一个重要因素。

  • 在训练神经网络时,学习率的选择至关重要。过高的学习率可能会导致模型在训练过程中产生震荡,甚至发散,无法收敛到最优解;而过低的学习率则会导致训练过程非常缓慢,需要更多的迭代次数才能达到较好的效果。

  • 因此,调整学习率的目标是在训练过程中找到一个合适的学习率,使得模型能够稳定且快速地收敛到最优解。这通常需要根据模型的训练情况、数据集的特性以及所使用的优化算法来动态调整学习率。

二、使用PyTorch中的库函数进行调整学习

  • Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。并提供3种调整方法:

    • 有序调整:等间隔调整(Step),多间隔调整(MultiStep),指数衰减(Exponential),余弦退火(CosineAnnealing);
    • 自适应调整:依训练状况伺机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);
    • 自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)
  • torch.optim.lr_sheduler 中有如下多种调整学习率的方法:

    import torch
    scheduler = torch.optim.lr_scheduler
    # 鼠标放在 lr_scheduler 上,按 CTRL 键可进入查看
    __all__ = ['LambdaLR', 'MultiplicativeLR', 'StepLR', 'MultiStepLR', 'ConstantLR', 'LinearLR','ExponentialLR', 'SequentialLR', 'CosineAnnealingLR', 'ChainedScheduler', 'ReduceLROnPlateau','CyclicLR', 'CosineAnnealingWarmRestarts', 'OneCycleLR', 'PolynomialLR']
    

三种常用的方法

1. StepLR

StepLR是一种等间隔调整学习率的方法。它按照预设的间隔(以epoch为单位)调整学习率,每次调整时将学习率乘以一个衰减因子(gamma)。

主要参数

  • step_size(int):学习率下降间隔数,即每经过多少个epoch后调整一次学习率。
  • gamma(float):学习率调整倍数,默认为0.1,即每次调整学习率时,新的学习率为lr = lr * gamma
  • last_epoch(int):上一个epoch数,用于指示学习率是否需要调整。当为-1时,学习率设置为初始值。

示例代码

import torch
import torch.optim as optim
from torch.optim.lr_scheduler import StepLRoptimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)for epoch in range(num_epochs):train(...)  # 训练模型test(...)   # 测试模型scheduler.step()  # 更新学习

2. MultiStepLR

MultiStepLR允许用户按照给定的间隔列表(milestones)调整学习率。与StepLR不同,这里的间隔不是固定的,而是由用户自定义的一系列epoch值。

主要参数

  • milestones(list):一个列表,包含需要调整学习率的epoch数。
  • gamma(float):学习率调整倍数,与StepLR相同。
  • last_epoch(int):同上。

示例代码

scheduler = MultiStepLR(optimizer, milestones=[30, 80, 120], gamma=0.1)

3. CosineAnnealingLR

CosineAnnealingLR采用余弦退火策略来调整学习率。学习率按照余弦函数周期性变化,在每个周期结束时重置为初始学习率,并在下一个周期中继续变化。

主要参数

  • T_max(int):学习率下降到最小值时的epoch数,即余弦函数周期的一半。
  • eta_min(float):学习率的最小值,默认为0。
  • last_epoch(int):同上。

示例代码

scheduler = CosineAnnealingLR(optimizer, T_max=100, eta_min=0)

以上三种方法各有特点,适用于不同的训练场景。StepLRMultiStepLR适用于需要固定或自定义间隔调整学习率的场景,而CosineAnnealingLR则提供了一种更为平滑的学习率调整方式,有助于模型在训练过程中更好地探索参数空间。在实际应用中,可以根据具体任务和模型情况选择合适的方法。


http://www.ppmy.cn/embedded/120068.html

相关文章

Ubuntu20.04中ros2 foxy版本安装gazebo,并运行小车运动demo

这里默认你安装好了ros2 foxy版本 sudo apt install gazebo11sudo apt install ros-foxy-gazebo-ros-pkgs建议把其他的包也安装了 sudo apt install ros-foxy-gazebo-*安装速度的话,比安装ros环境快多了。 此时,可以在/opt/ros/foxy/share目录下看到若…

2024最新国内镜像源设置(npm、yarn、pnpm)

淘宝镜像源https://registry.npmmirror.com/ 腾讯云镜像源https://mirrors.cloud.tencent.com/npm/ cnpm是一个基于npm的中国镜像源https://r.cnpmjs.org/ # 查询当前使用的镜像源 npm get registry# 设置为淘宝镜像源 npm config set registry https://registry.npmmirror.co…

MRC接收机

MRC(Maximum Ratio Combining,最大比联合)接收机是一种无线通信接收技术,主要用于提高接收机的性能。以下是对MRC接收机的详细解析: 一、技术原理 MRC技术会同时接收来自多个天线的无线信号,然后将这些信…

钉钉H5微应用Springboot+Vue开发分享

文章目录 说明技术路线注意操作步骤思路图 一、创建钉钉应用二、创建java项目三、创建vue项目(或uniapp项目),npm引入sdk的依赖四、拥有公网域名端口。开发环境可以使用(贝锐花生壳等工具)五、打开钉钉开发者平台&…

uniapp在线打包的ios后调用摄像头失败的解决方法

uniapp在线打包的ios后调用摄像头失败的解决方法 解决方法: 由于未选中打包模块的配置 当你在测试时发现能够正常的开启摄像头,但是当你对其进行在线打包后,发现当你点击启用摄像头时,没有反应,或者是打开是黑屏状态…

9.30学习

1.如何保证顺序消费 ●单 topic,单partition,单 consumer,单线程消费,吞吐量低,不推荐 ●如只需保证单key有序,为每个key申请单独内存 queue,每个线程分别消费一个内存 queue 即可&#xff0c…

【RabbitMQ 项目】服务端:服务器模块

文章目录 一.编写思路二.代码实践三.服务端模块关系总结 一.编写思路 成员变量: muduo 库中的 TCP 服务器EventLoop 对象:用于主线程循环监控连接事件协议处理句柄分发器:用于初始化协议处理器,便于把不同请求派发给不同的业务处理…

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网 统版本:官方软件作者:热心网友rom大小:911MB发布日期:2018-12-23 努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂RO…