首页 > 其他分享 >学习率

学习率

时间:2024-09-15 17:02:41浏览次数:1  
标签:训练 -- 衰减 学习 lr final

在你的代码中有两个不同的学习率(lr),它们分别是通过 --lr--final_lr 参数定义的。下面是对这两个学习率的解释:

1. --lr: 初始学习率

parser.add_argument('--lr', type=float, default=0.003, help='learning rate')
  • 含义:这是模型训练时的初始学习率(lr),用于在优化器中定义训练初始时的学习率。它代表了模型参数更新的初始步伐。
  • 使用场景:在优化器中使用:
    optimizer = torch.optim.Adam(self.model.parameters(), lr=self.config.lr)
    
    此处 self.config.lr 就是通过 --lr 参数设置的初始学习率。
  • 作用:这是在训练开始时模型更新参数的速度。在代码中默认值为 0.003

2. --final_lr: 最终学习率

parser.add_argument('--final_lr', type=float, default=1e-3, help='exponential decay from lr')
  • 含义:这是在训练的末期希望学习率逐渐减小到的目标值(final_lr)。它用于控制学习率从初始学习率 lr 逐步衰减到 final_lr 的过程。
  • 指数衰减机制:在代码中,你使用了一个指数衰减的学习率调度器:
    self.log_alpha = log(config.final_lr / config.lr) / self.max_step
    lr_lambda = lambda step: exp(log_alpha * (step + 1))  # 相当于 alpha^{step}
    scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lr_lambda)
    
    这里 self.log_alpha 是基于 lrfinal_lr 计算的,用来确定学习率随时间衰减的速率。LambdaLR 调度器使用这个 log_alpha 来根据训练步数更新学习率,最终使学习率逐步接近 final_lr
  • 作用:通过这个指数衰减机制,学习率在整个训练过程中逐步减小,保证在训练的后期,模型的学习步伐变得更小,从而提高模型的稳定性。

学习率的变化过程:

  • 训练开始时,学习率为 --lr(即 config.lr,例如 0.003)。
  • 随着训练的进行,学习率会根据指数衰减公式逐渐减少,最终接近 --final_lr(即 config.final_lr,例如 1e-3)。
  • get_scheduler() 函数中定义了这个衰减过程,通过 lr_lambda 函数,每个 batch 之后学习率都会进行一次调整。

总结:

  • 初始学习率(lr:在训练开始时使用,决定模型参数初始的更新步伐。
  • 最终学习率(final_lr:是训练结束时希望学习率衰减到的目标值,用于让学习率逐渐减小,从而在训练后期模型能以更小的步伐进行更新。

标签:训练,--,衰减,学习,lr,final
From: https://www.cnblogs.com/csjywu01/p/18415413

相关文章

  • 【SpringCloud】黑马微服务学习笔记
    目录1.关于微服务 1.1微服务与单体架构的区别 1.2SpringCloud技术2.学习前准备 2.1环境搭建 2.2熟悉项目3.正式拆分 3.1拆分商品功能模块 3.2拆分购物车功能模块4.服务调用 4.1介绍 4.2RustTemplate 的使用4.3服务治理-注册中心4.4服务......
  • 【USB3.0协议学习】Topic1·USB3.0Hub的一些机制
    一、USB3.0Hub的单播(非广播)机制Hub通过解析下行packetheader中的RouteString字段识别packet要传递的终点,其中4'b0000代表hub本身,4'b0001-4'b1111分别代表hub的各downstreamport,由于USB3.0规定HostController最多级联5级hub,所以每个packetheader中的RouteString字段共有4x5......
  • 深度学习-神经网络构造
    文章目录一、正则化惩罚1.L1正则化2.L2正则化二、梯度下降(GradientDescent)1.基本原理2.注意事项三、BP神经网络1.基本原理2.网络结构3.特点四、总结一、正则化惩罚正则化惩罚(RegularizationPenalty)是机器学习中常用的一种技术,用于减少模型的复杂度,防止模型过拟......
  • 学习Python第一步,先安装Python,最新安装教程!
      随着人工智能,网络爬虫,大数据分析等业务模式的流行,Python依靠拥有各种开源库,且入门容易等特性越来越火爆。想到就去做,赶紧下载Python学习起来,本文将详细介绍Python编程环境的搭建。Python的版本选择目前Python有两个版本,一个是2.x,一个是3.x,这两个版本并不兼容。由于在20......
  • 【Python基础学习】16个必知必会的Python教程
    介绍Python是一门用途广泛的编程语言,它具有大量的库和框架。有一些鲜为人知的Python编码技巧和库可以让你作为开发人员的工作更为轻松,编写代码更高效。本文中将探讨一些鲜为人知的Python技巧,这些技巧非常有用,但并不广为人知。通过学习和使用这些技巧,可以帮你节省时......
  • 学习笔记JVM篇(三)
    一、垃圾回收机制垃圾回收(GarbageCollection)机制,是自动回收无用对象从而释放内存的一种机制。Java之所以相对简单,很大程度是归功于垃圾回收机制。(例如C语言申请内存后要手动的释放)优点:简化了开发难度,同时让内存分配更合理。缺点:屏蔽了底层,同时垃圾回收也会在一定程度上......
  • MyBatis系统学习(三)——动态SQL
    MyBatis是一款优秀的持久层框架,它通过XML或注解方式将SQL语句与Java对象映射起来。动态SQL是MyBatis中非常强大的功能之一,能够根据不同的条件动态生成SQL语句。动态SQL通过各种标签来灵活生成SQL,从而避免了在代码中拼接SQL的复杂性和冗余性。接下来,我们会......
  • 这些年没来得及学习的一些 HTML5 标签
    认识并学习下还没来得及学习的一些HTML5标签<ruby>标签HTML <ruby> 元素被用来展示东亚文字注音或字符注释。比如:<ruby>兄弟<rt>xiongdi</rt></ruby><rt>元素包含字符的发音,字符在ruby注解中出现,它用于描述东亚字符的发音。这个元素始终在 <ruby> 元素中使用。......
  • Java抽象类和接口的学习了解
    目录1.抽象类1.1抽象类概念1.2例子1.3 抽象类语法1.被abstract修饰的类--抽象类2.抽象类中被abstract修饰的方法--抽象方法,该方法不用给出具体的实现体3.当一个类中含有抽象方法时,该类必须要abstract修饰4.抽象类也是类,内部可以包含普通方法和属性,甚至构造方法......
  • CMake构建学习笔记16-使用VS进行CMake项目的开发D4
    目录*1.概论2.详论2.1创建工程2.2加载工程2.3配置文件:飞数机场2.4工程配置2.5调试执行3.项目案例4.总结1.概论在之前的系列博文中,我们学习了如何构建第三方的依赖库,也学习了如何去组建自己的CMake项目,尤其是学习了CMake的核心配置文件CMakeLists.txt如......