RTDETR更换优化器——Lion

RTDETR更换Lion优化器

论文:https://arxiv.org/abs/2302.06675
代码:https://github.com/google/automl/blob/master/lion/lion_pytorch.py
在这里插入图片描述
简介:
Lion优化器是一种基于梯度的优化算法,旨在提高梯度下降法在深度学习中的优化效果。Lion优化器具有以下几个特点:

  • 自适应学习率:Lion优化器能够自动调整学习率,根据每个参数的梯度情况来自适应地更新学习率。这使得模型能够更快地收敛,并且不易陷入局部最优点。

  • 动量加速:Lion优化器引入了动量概念,通过积累历史梯度的一部分来加速梯度更新。这样可以增加参数更新的稳定性,避免陷入震荡或振荡状态。

  • 参数分布均衡:Lion优化器通过分析模型参数的梯度分布情况,对梯度进行动态调整,以实现参数分布的均衡。这有助于避免某些参数过于稀疏或过于密集的问题,提高模型的泛化能力。

与AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半;
由于 Lion 的简单性,Lion 在我们的实验中具有更快的运行时间(step/s),通常比 AdamW 和 Adafactor 提速 2-15%;

优化器代码:
# Copyright 2023 Google Research. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
"""PyTorch implementation of the Lion optimizer."""
import torch
from torch.optim.optimizer import Optimizerclass Lion(Optimizer):r"""Implements Lion algorithm."""def __init__(self, params, lr=1e-4, betas=(0.9, 0.99), weight_decay=0.0):"""Initialize the hyperparameters.Args:params (iterable): iterable of parameters to optimize or dicts definingparameter groupslr (float, optional): learning rate (default: 1e-4)betas (Tuple[float, float], optional): coefficients used for computingrunning averages of gradient and its square (default: (0.9, 0.99))weight_decay (float, optional): weight decay coefficient (default: 0)"""if not 0.0 <= lr:raise ValueError('Invalid learning rate: {}'.format(lr))if not 0.0 <= betas[0] < 1.0:raise ValueError('Invalid beta parameter at index 0: {}'.format(betas[0]))if not 0.0 <= betas[1] < 1.0:raise ValueError('Invalid beta parameter at index 1: {}'.format(betas[1]))defaults = dict(lr=lr, betas=betas, weight_decay=weight_decay)super().__init__(params, defaults)@torch.no_grad()def step(self, closure=None):"""Performs a single optimization step.Args:closure (callable, optional): A closure that reevaluates the modeland returns the loss.Returns:the loss."""loss = Noneif closure is not None:with torch.enable_grad():loss = closure()for group in self.param_groups:for p in group['params']:if p.grad is None:continue# Perform stepweight decayp.data.mul_(1 - group['lr'] * group['weight_decay'])grad = p.gradstate = self.state[p]# State initializationif len(state) == 0:# Exponential moving average of gradient valuesstate['exp_avg'] = torch.zeros_like(p)exp_avg = state['exp_avg']beta1, beta2 = group['betas']# Weight updateupdate = exp_avg * beta1 + grad * (1 - beta1)p.add_(update.sign_(), alpha=-group['lr'])# Decay the momentum running average coefficientexp_avg.mul_(beta2).add_(grad, alpha=1 - beta2)return loss

将上述代码复制粘贴在ultralytics/engine下创建lion_pytorch.py文件。
在这里插入图片描述
在ultralytics/engine/trainer.py中导入Lion

from ultralytics.engine.lion_pytorch import Lion

然后在def build_optimizer(self)函数中加入下列代码

        elif name == 'Lion':optimizer = Lion(g[2])

在这里插入图片描述
之后就可以在训练时使用Lion优化器了

    results = model.train(data="ultralytics/cfg/datasets/coco.yaml", epochs=500, batch=16, workers=8,resume=False,close_mosaic=10, name='cfg', patience=500, pretrained=False, cos_lr=True,optimizer ='Lion',device=1)  # 训练模型

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

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

相关文章

MyBatis~配置解析, 属性(properties)、设置(settings)

注意, 对应的名称一定要相同, 比如username就要对应username, 而且如果同时使用外部配置文件和property, 优先级是外部配置文件优先级更高 设置&#xff08;settings&#xff09; 这是 MyBatis 中极为重要的调整设置&#xff0c;它们会改变 MyBatis 的运行时行为。 下表描述了…

prompt:我是晚餐盲盒,只要你问出“今晚吃什么”我就将为你生成美妙的食物推荐。

使用方法&#xff1a;在ChatGP粘贴下面提示词模型&#xff0c;点击输出。然后再问“晚餐有什么好吃的&#xff1f;”&#xff0c;AI输出丰种食物供你选择。抽到什么吃什么&#xff0c;极大的解决选择困难的问题。 客户需要生成1000条俏皮灵动&#xff0c;趣味盎然&#xff0c;比…

基于机器学习的网页摘要生成算法的研究与实现

摘要&#xff1a;随着互联网的迅猛发展&#xff0c;网页信息量呈爆炸式增长&#xff0c;用户往往难以在海量信息中快速获取所需内容。因此&#xff0c;开发一种能够自动生成网页摘要的算法&#xff0c;对于提高信息检索效率具有重要意义。本文将对基于机器学习的网页摘要生成算…

pytest测试框架pytest-order插件自定义用例执行顺序

pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍插件pytest-order&#xff0c;用于自定义pytest测试用例的执行顺序。pytest-order是插件pytest-ordering的一个分支&#xff0c;但是pytest-ordering已经不再维护了&#xff0c;建议大家直接使用pytest-order。 官方文…

华为云安全防护,九河云综合分解优劣势分析

随着全球化的发展&#xff0c;越来越多的企业开始寻求在国际市场上扩展业务&#xff0c;这一趋势被称为企业出海。然而&#xff0c;企业在海外扩张面临诸多隐患与安全挑战&#xff0c;其中因为地域的不同&#xff0c;在安全性方面与国内相比会变得薄弱&#xff0c;从而导致被黑…

如何在浏览器中查看网页的HTML源代码?

如何在浏览器中查看网页的HTML源代码&#xff1f; 浏览html网页&#xff0c;查看其源代码&#xff0c;可以帮助我们了解该版网页的信息以及架构&#xff0c;每个浏览器都是允许用户查看他们访问的任何网页的HTML源代码的。以下编程狮小师妹就介绍几个常见浏览器的查看网页 HTM…

mysql安装创建数据库防止踩坑

为了安装MySQL的家人们走弯路&#xff0c;稍微有些啰嗦&#xff0c;讲述我安装的时遇到的问题&#xff0c;如何解决。仔细看看离成功不远。 mysql下载链接 MySQL :: Download MySQL Community Server windows下安装mysql-8.0.29-winx64&#xff0c;下载安装包后解压到文件夹中…

C语言 | Leetcode C语言题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; int hammingWeight(uint32_t n) {int ret 0;while (n) {n & n - 1;ret;}return ret; }

基于深度学习的文本检索

基于深度学习的文本检索 文本检索&#xff08;Text Retrieval&#xff09;是指在大量文本数据中&#xff0c;根据用户的查询文本找到相关文档。基于深度学习的方法通过提取文本的高层次语义特征&#xff0c;实现了高效和准确的文本检索。 深度学习在文本检索中的优势 语义理…

Windows安装jdk配置环境变量(基础)

一、下载安装JDK 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/?er221886#java8-windows 因为JDK8比较稳定&#xff0c;所以建议选择这个。电脑32位的下载jdk-8u411-windows-i586.exe&#xff1b;电脑是64位的下载jdk-8u411-windows-x64.exe 1、…

链动2+1模型:驱动用户增长与业务提升的新引擎

大家好&#xff0c;我是吴军&#xff0c;来自一家业界领先的科技创新公司。在今天&#xff0c;我想与大家分享一个在我们业务中取得显著成果的运营策略——链动21模型&#xff0c;以及它是如何助力我们优化用户满意度&#xff0c;提高用户粘性和促进复购率的。 尽管链动模式在业…

安装Flask

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 大多数Python包都使用pip实用工具安装&#xff0c;使用Virtualenv创建虚拟环境时会自动安装pip。激活虚拟环境后&#xff0c;pip 所在的路径会被添加…

计算机组成原理——系统总线

题目:计算机使用总线结构便于增减外设,同时__C____。 A.减少了信息传送量 B.提高了信息传输速度 C.减少了信息传输线的条数 1. 总线的分类 1.1. 片内总线 芯片内部的总线 在CPU芯片内部,寄存器与寄存器之间、寄存器与逻辑单元ALU之间 1.1.1. 数据总线 双向传输总线 数…

深入解析B树:节点子节点数量的奥秘

在计算机科学中&#xff0c;B树是一种自平衡的树形数据结构&#xff0c;它能够保持数据有序&#xff0c;并且允许进行高效的搜索、顺序访问、插入和删除操作。B树广泛应用于数据库和文件系统的索引结构中&#xff0c;因为它可以有效地减少磁盘I/O操作次数。本文将深入探讨B树的…

VUE----通过nvm管理node版本

使用 NVM(Node Version Manager)来管理和切换 Node.js 版本是一个很好的选择。以下是在 苹果电脑macos系统 上使用 NVM 安装和切换 Node.js 版本的步骤: 1. 安装 NVM 如果你还没有安装 NVM,可以按照以下步骤进行安装: 打开终端,运行以下命令以下载并安装 NVM: curl …

c语言中的for循环

在C语言中&#xff0c;for循环是控制结构之一&#xff0c;用于多次执行一段代码。其具体用法如下&#xff1a; 语法 for (初始化表达式; 条件表达式; 更新表达式) {// 循环体 }参数说明 初始化表达式&#xff1a;在循环开始前执行一次&#xff0c;用于初始化循环控制变量。条…

BeautifulSoup解析HTML

需要解析HTML源码里面的内容&#xff0c;包含特定标签和属性 <div class"file-source"><table><tr><th align"right">Line</th><th align"right">Branch</th><th align"right">Exec…

箭头函数的应用场景

箭头函数是 ES6 中新增的一种函数书写方式&#xff0c;通常用于简洁地定义匿名函数。它的应用场景包括但不限于以下几个方面&#xff1a; 1.简化回调函数&#xff1a;箭头函数可以让回调函数的书写更加简洁&#xff0c;减少代码量。 // 传统函数形式 setTimeout(function() {…

麒麟系统安装Redis

一、背景 如前文&#xff08;《麒麟系统安装MySQL》&#xff09;所述。 二、下载Redis源码 官方未提供麒麟系统的Redis软件&#xff0c;须下载源码编译。 下载地址&#xff1a;https://redis.io/downloads 6.2.14版本源码下载地址&#xff1a;https://download.redis.io/re…

Linux系统中管理文件和目录权限的详细说明,部署服务器遇到文件权限的问题,就想着记录一下

Linux 文件权限基础 在Linux中&#xff0c;每个文件和目录都关联着三个类别的权限&#xff1a; 所有者&#xff08;Owner&#xff09;&#xff1a;通常是创建文件或目录的用户。组&#xff08;Group&#xff09;&#xff1a;与文件或目录关联的用户组。组成员共享文件的组权限…