学习率调整

学习率调整

import mathdef adjust_learning_rate(optimizer, epoch, args):"""Decay the learning rate with half-cycle cosine after warmup"""if epoch < args.warmup_epochs:lr = args.lr * epoch / args.warmup_epochs else:lr = args.min_lr + (args.lr - args.min_lr) * 0.5 * \(1. + math.cos(math.pi * (epoch - args.warmup_epochs) / (args.epochs - args.warmup_epochs)))for param_group in optimizer.param_groups:if "lr_scale" in param_group:param_group["lr"] = lr * param_group["lr_scale"]else:param_group["lr"] = lrreturn lr

预热阶段的学习率调整:

if epoch < args.warmup_epochs:lr = args.lr * epoch / args.warmup_epochs

如果当前 epoch 小于预热周期数 args.warmup_epochs,则学习率 lr 随着 epoch 线性增加,从 0 增加到初始学习率 args.lr。公式为 lr = lr * epoch / warmup_epochs
lr = lr × epoch w a r m u p _ e p o c h s \text{lr} = \frac{\text{lr} \times \text{epoch}}{warmup\_epochs} lr=warmup_epochslr×epoch

余弦退火阶段的学习率调整

else:lr = args.min_lr + (args.lr - args.min_lr) * 0.5 * \(1. + math.cos(math.pi * (epoch - args.warmup_epochs) / (args.epochs - args.warmup_epochs)))

如果当前 epoch 大于等于预热周期数 args.warmup_epochs,则使用余弦退火函数来调整学习率。公式为:

lr = args.min_lr + ( args.lr − args.min_lr ) × 0.5 × ( 1 + cos ⁡ ( π × epoch − args.warmup_epochs args.epochs − args.warmup_epochs ) ) \text{lr} = \text{args.min\_lr} + (\text{args.lr} - \text{args.min\_lr}) \times 0.5 \times \left(1 + \cos\left(\pi \times \frac{\text{epoch} - \text{args.warmup\_epochs}}{\text{args.epochs} - \text{args.warmup\_epochs}}\right)\right) lr=args.min_lr+(args.lrargs.min_lr)×0.5×(1+cos(π×args.epochsargs.warmup_epochsepochargs.warmup_epochs))

更新优化器的学习率

for param_group in optimizer.param_groups:if "lr_scale" in param_group:param_group["lr"] = lr * param_group["lr_scale"]else:param_group["lr"] = lr

这个函数根据训练周期动态调整学习率,先进行线性预热,然后使用余弦退火策略。这样可以在初期稳定模型的训练,避免较大学习率带来的不稳定性,并在后期逐渐减小学习率,提高模型的收敛效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不是,你不会还在用双层遍历循环来做新旧数组对比,寻找新增元素吧?

目录 一、双层循环遍历 1.1、双循环错误示范 1.2、正确的做法 ①使用array.includes() ②使用set 二、array.includes()的使用与技巧 2.1、基本语法 2.2、返回值 2.3、使用技巧 2.3.1、用户输入验证 2.3.2、权限检查 2.4、兼容问题 三、总结 一、双层循环遍历 1.…

【重学C语言】十七、预处理指令

【重学C语言】十七、预处理指令 预处理指令预定义宏`#define` 宏定义示例注意事项特殊符号条件编译头文件包含`#pragma`预处理指令 C语言中的预处理指令(Preprocessor Directives)是一种特殊的指令,它们在编译过程的早期阶段(即实际编译之前)被预处理器(Preprocessor)处…

OpenCV学习 基础图像操作(十六):图像距离变换

基础原理 顾名思义&#xff0c;我们可以利用像素之间的距离作为对该像素的一种刻画&#xff0c;并将其运用到相应的计算之中。然而&#xff0c;在一幅图像之中&#xff0c;某种类型的像素并不是唯一的&#xff0c;因此我门常计算的是一类像素到另一类的最小距离&#xff0c;并…

My Spirit | “顶级复盘”

世界不会在意你的自尊&#xff0c; 人们看到的只是你的成就。 在你没有成就之前&#xff0c; 切勿过分强调自尊。 ——菲茨杰拉德《了不起的盖茨比》 目录 My Spirit | “顶级复盘”00 | 日复盘01 | 周复盘2.1 周计划2.2 周复盘2.3 下步计划2.4 下步总结 02 | 月复盘2.1 本月目…

香橙派KunPengPro评测

一、引言 二、开箱 2.1、主要包含说明 1、充电器(赠typec-c线) 2、香橙派kunpengpro(已经带装好带散热器) 3、SD卡(32G)(已经带装好系统openEuler 22.03 (LTS-SP3)) (注意&#xff1a;上电接HDMI线可直接用&#xff0c;账号&#xff1a;openEuler 密码&#xff1a;openEuler)…

vue使用tailwindcss

安装依赖 pnpm add -D tailwindcss postcss autoprefixer创建配置文件tailwind.config.js npx tailwindcss init在配置文件content中添加所有模板文件的路径 /** type {import(tailwindcss).Config} */ export default {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,…

【Linux】开发工具入门指南,轻松掌握你的开发利器

开发工具 1. 软件包管理器yum1.1 软件包安装方式1.2 yum的"三板斧"1.3 yum的周边 2. 开发工具3. 编辑器vim4. 编译器gcc、g5. 项目自动化构建工具make、Makefile6. 进度条小程序7. 调试器gdb 1. 软件包管理器yum 1.1 软件包安装方式 源代码安装&#xff1a;用户手动…

微信小程序 npm构建+vant-weaap安装

微信小程序&#xff1a;工具-npm构建 报错 解决&#xff1a; 1、新建miniprogram文件后&#xff0c;直接进入到miniprogram目录&#xff0c;再次执行下面两个命令&#xff0c;然后再构建npm成功 npm init -y npm install express&#xff08;Node js后端Express开发&#xff…

智慧校园的机遇与挑战

随着5G、物联网、大数据等技能的日渐老练&#xff0c;数字化正在渗透到各行各业中&#xff0c;为事务立异和价值增加供给支撑。在教育职业&#xff0c;运用智能化体系赋能教育办理越来越受欢迎&#xff0c;教育信息化方针一再出台&#xff0c;进一步加快了智慧校园落地的脚步。…

Linux - 文件管理高级 sed

3.处理字符 sed ① sed 默认情况下不会修改原文件内容 ② sed 是一种非交互式的编辑器 3.1 工作原理 将原文件一行一行的进行处理&#xff0c;取出一行&#xff0c;放入“模式空间进行处理”&#xff0c;处理完成之后将结果输出到屏幕上&#xff0c;然后读取下一行&#xf…

彭涛 | 2024年5月小结

5月份还是蛮有刺激的&#xff0c;做了蛮多的事情&#xff0c;但是没赚到钱&#xff0c;真是一屯操作猛如虎&#xff0c;一看账户0.5。 就喜欢创业这种一天天累死累活还不赚钱的感觉&#xff0c;哈哈哈哈 老规矩简单说下这个月的情况&#xff0c;如果对你有收获就最好了。 游学丹…

测绘外业需要注意些什么?

在进行测绘外业时&#xff0c;需要注意的事项涉及多个方面&#xff0c;包括充分的准备工作、合理的设备选择、精确的操作技巧以及细致的数据处理。下面将具体展开这些要点&#xff1a; 1. 充分准备 - 了解任务要求&#xff1a;在开始外业工作前&#xff0c;需要明确测绘的目…

VUE框架前置知识总结

一、前言 在学习vue框架中&#xff0c;总是有些知识不是很熟悉&#xff0c;又不想系统的学习JS&#xff0c;因为学习成本太大了&#xff0c;所以用到什么知识就学习什么知识。此文档就用于记录零散的知识点。主要是还是针对与ES6规范的JS知识点。 以下实验环境都是在windows环…

头歌页面置换算法第2关:计算OPT算法缺页率

2 任务:OPT算法 2.1 任务描述 设计OPT页面置换算法模拟程序:从键盘输入访问串。计算OPT算法在不同内存页框数时的缺页数和缺页率。要求程序模拟驻留集变化过程,即能模拟页框装入与释放过程。 2.2任务要求 输入串长度作为总页框数目,补充程序完成OPT算法。 2.3算法思路 OPT算…

【Tlias智能学习辅助系统】04 部门管理 删除 和 新增

Tlias智能学习辅助系统 04 部门管理 删除 和 新增 删除部门APIDeptController.javaDeptService.javaDeptServiceImpl.javaDeptMapper.java前端联调 新增部门API有一步简化DeptController.javaDeptService.javaDeptServiceImpl.javaDeptMapper.java前端联调 删除部门API 请求路径…

31-ESP32-S3-WIFI篇-02 Event Group (事件标记组)

ESP32-S3-WIFI 事件标记组 介绍 在ESP32-S3的WiFi驱动程序中&#xff0c;事件标记组&#xff08;Event Group&#xff09;是一个非常重要的概念。它是FreeRTOS中的一种同步机制&#xff0c;用于在任务之间传递和同步事件。在WiFi驱动程序中&#xff0c;我们使用事件标记组来通…

Go 语言字符串及 strings 和 strconv 包

在 Go 语言编程中&#xff0c;字符串是最基本、最常用的数据类型之一。无论是处理用户输入、读取文件内容&#xff0c;还是生成输出&#xff0c;字符串操作无处不在。为了方便开发者对字符串进行各种操作&#xff0c;Go 语言提供了强大的 strings 包和 strconv 包。strings 包包…

Selenium+Java 环境搭建

selenium 介绍 Selenium 是 web 应用中基于 UI 的自动化测试框架&#xff0c;支持多平台、多浏览器、多语言。 早期的 selenium RC 已经被现在的 webDriver 所替代&#xff0c;可以简单的理解为selenium1.0webdriver 构成 现在的 Selenium2.0 。现在我们说起 selenium &#xf…

适合学生写作业的台灯有哪些?台灯怎么选详细攻略!

在数字化飞速发展的今天&#xff0c;孩子们的学习和生活越来越离不开电子屏幕。然而&#xff0c;长时间盯着屏幕&#xff0c;不仅容易让眼睛感到疲劳&#xff0c;更是近视问题日益严重的元凶之一。每一位家长都希望孩子能拥有健康的视力&#xff0c;因此会为孩子挑选一台护眼灯…

MySQL十部曲之九:MySQL优化理论

文章目录 前言概述查询优化查询执行计划EXPLAIN获取表结构信息获取执行计划信息 EXPLAIN 输出格式如何使用EXPLAIN进行优化 范围访问优化单列索引的范围访问多列索引的范围访问 索引合并优化索引合并交叉访问算法索引合并联合访问算法索引合并排序联合访问算法 索引下推优化连接…