YOLOV8替换Lion优化器

news2024/9/22 17:30:16

YOLOV8替换Lion优化器

1 优化器介绍博客

参考bilibili讲解视频

论文地址:https://arxiv.org/abs/2302.06675

代码地址:https://github.com/google/automl/blob/master/lion/lion_pytorch.py

"""PyTorch implementation of the Lion optimizer."""
import torch
from torch.optim.optimizer import Optimizer
 
 
class 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 defining
        parameter groups
      lr (float, optional): learning rate (default: 1e-4)
      betas (Tuple[float, float], optional): coefficients used for computing
        running 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 model
        and returns the loss.
    Returns:
      the loss.
    """
    loss = None
    if 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 decay
        p.data.mul_(1 - group['lr'] * group['weight_decay'])
 
        grad = p.grad
        state = self.state[p]
        # State initialization
        if len(state) == 0:
          # Exponential moving average of gradient values
          state['exp_avg'] = torch.zeros_like(p)
 
        exp_avg = state['exp_avg']
        beta1, beta2 = group['betas']
 
        # Weight update
        update = exp_avg * beta1 + grad * (1 - beta1)
        p.add_(torch.sign(update), alpha=-group['lr'])
        # Decay the momentum running average coefficient
        exp_avg.mul_(beta2).add_(grad, alpha=1 - beta2)
 
    return loss

2 在相应的文件夹内新建lion_pytorch.py文件

在这里插入图片描述

3 在trianer.py中添加Lion优化器

在这里插入图片描述

from ultralytics.engine.lion_pytorch import Lion    #Lion optimizer

然后在末尾build_optimizer函数中添加判断是否使用Lion优化器:
在这里插入图片描述

def build_optimizer(self, model, name="auto", lr=0.001, momentum=0.9, decay=1e-5, iterations=1e5):
·······


    elif name == "Lion":
        optimizer = Lion(g[2], lr=lr, betas=(momentum, 0.99), weight_decay=0.0)
·······

4 设置Lion优化器并训练查看

方法1:defalut.yaml中修改默认设置:
在这里插入图片描述
方法2:训练文件中自定义设置:
在这里插入图片描述Lion优化器默认的学习率改为为1e-4,不然就是yolov8中默认的0.01。

运行训练文件后可以看到如下提示则修改成功:
在这里插入图片描述

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

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

相关文章

linux 上源码编译安装 PolarDB-X

PolarDB-X 简介 PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构&#xff0c;支持水平扩展、分布式事务、混合负载等能力&#xff0c;具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等…

CTF-web基础 HTTP协议

基础 HTTPHypertext Transfer Protocol 超文本链接协议&#xff0c;他是无状态的&#xff08;每一次请求都是独立的&#xff09;&#xff0c;发出request发给服务器然后返回responce&#xff0c;现在的版本是1.1版本&#xff0c;默认端口80&#xff08;https是443&#xff09;…

ubuntu上安装HBase伪分布式-2024年08月04日

ubuntu上安装HBase伪分布式-2024年08月04日 1.HBase介绍2.HBase与Hadoop的关系3.安装前言4.下载及安装5.单机配置6.伪分布式配置 1.HBase介绍 HBase是一个开源的非关系型数据库&#xff0c;它基于Google的Bigtable设计&#xff0c;用于支持对大型数据集的实时读写访问。HBase有…

rust读取csv文件,匹配搜索字符

1.代码 use std::fs::File; use std::io::{BufRead, BufReader}; use regex::{Regex};fn main() {let f File::open("F:\\0-X-RUST\\1-systematic\\ch2-fileRead\\data\\test.csv").unwrap();let mut reader BufReader::new(f);let re Regex::new("45asd&qu…

Stable Diffusion绘画 | 文生图-采样器使用说明

webui 1.9.3版本中&#xff0c;采样器分为“采样方法”、“调度类型”两个选项。 因为采样器选项多&#xff0c;所以需要做一个筛选&#xff0c;保留图像生成效果好的采样器。 老派采样器 可以选择砍掉的采样器&#xff1a; DDIMPLMS 最为推荐保留的采样器&#xff1a; Eul…

Python 实现股票指标计算——LON

LON - 铁龙长线 1 公式 LC : REF(CLOSE,1); VID : SUM(VOL,2)/(((HHV(HIGH,2)-LLV(LOW,2)))*100); RC : (CLOSE-LC)*VID; LONG : SUM(RC,0); DIFF : SMA(LONG,10,1); DEA : SMA(LONG,20,1); LON : DIFF-DEA; LONMA : MA(LON,10); LONT : LON, COLORSTICK; 2 数据准备…

03 库的操作

目录 创建查看修改删除备份和恢复查看连接情况 1. 创建 语法 CRATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] …] create_specification:  CHARACTER SET charset_name  CPLLATE collation_name 说明&#xff1a; 大写的标识关键…

C语言函数传参

文章目录 &#x1f34a;自我介绍&#x1f34a;函数传参之值传递&#x1f34a;函数传参之地址传递&#x1f34a;函数传参之数组 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性&#xff0c;用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或者其他复杂的计算&#xff0c;也就是说窗口函数可以跨行计算&#xff0c;可以扫描所有的行&#xff0c;并把结果填到每一行中。这些函数通常与…

注入类漏洞挖掘指南

1. 注入攻击类 1.1 SQL注入 漏洞描述&#xff1a; 所谓SQL注入&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。具体来说&#xff0c;它是利用现有应用程序&#xff0c;将&#xff08;恶意…

elasticsearch的学习(一):使用postman实现增删改查

简介&#xff1a; elasticsearch的基本的概念和通过postman来实现增删改查 elasticsearch 一个分布式的&#xff0c;restful风格的搜索和数据分析引擎&#xff0c;可以近乎实时的存储&#xff0c;检索数据&#xff0c;具有高扩展性&#xff0c;可以扩展到上百台服务器&#…

使用.NET NativeAOT模式开发hyper-v平台uefi上windbg调试引擎心得

引用 这篇文章的目的是介绍一款实验性的Uefi项目基于.NET NativeAOT模式实现的运行在Windows Hyper-V虚拟机上的windbg调试引擎开发心得 文章目录 引用简介NativeAOT模式动态接口的多态继承绑定实现方式分析NativeAOT模式运行时栈回溯实现方式分析模拟vcruntime实现的c异常捕获…

江科大/江协科技 STM32学习笔记P17

文章目录 一、TIM输入捕获输入捕获与输出比较的关系频率测量测频法测周法 输入捕获的电路异或门的执行逻辑 输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构输入捕获模式测频率main.c 输入捕获模式测占空比main.c 一、TIM输入捕获 输入捕获与输出比较的关系 在输出比较中…

C语言第13篇

1.下面程序是计算n个数的平均值,请填空.______ #include<stdio.h> void main( ) { int i,n; float x,avg0.0; scanf("%d",&n); for(i0;i<n;i) { scanf("%f",&x); avgavg______; } avg________; printf("avg%f\n",avg); } A) …

[Git][分支管理][上]详细讲解

目录 1.理解分支2.创建分支3.切换分支4.合并分支5.删除分支 1.理解分支 感性理解&#xff1a;分支可以理解为平行宇宙&#xff0c;但是在用户需要的时候&#xff0c;可以将两个平行宇宙合并&#xff0c;此时两个平行宇宙的效果将会"叠加"理性理解&#xff1a;每次提…

树、二叉树、森林的转换

一、树和二叉树的转换 1、 2、 二、森林二叉树的转换 1、 2、

springboot医嘱管理系统-计算机毕业设计源码16053

摘 要 随着医疗信息化水平的不断提升&#xff0c;医嘱管理作为医院日常运营中不可或缺的一环&#xff0c;其重要性日益凸显。传统的医嘱管理方式往往存在效率低下、易出错等问题&#xff0c;已无法满足现代医疗服务的快速发展需求。因此&#xff0c;基于Spring Boot框架开发的…

MySQL-InnoDB引擎

目录 逻辑存储结构 架构 概述 内存结构 Buffer Pool&#xff08;缓冲池&#xff09; Change Buffer&#xff08;更改缓冲区&#xff09; Adaptive Hash Index&#xff08;自适应hash索引&#xff09; Log Buffer&#xff08;日志缓冲区&#xff09; 磁盘结构 System T…

基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练

目录 0 结果预览 1 核心点 2 参考链接 0 结果预览 1 核心点 yolo命令行CL需要将虚拟环境的yolo程序加入系统路径。 遇到conda install 失效问题&#xff0c;重建新的虚拟环境&#xff0c;再进行安装。 whl可以下载好后再安装。 pip install F:\tool\ai\torch-2.3.1cu…

使用VM安装K8S

VM 部署K8S 前言 本次使用VM搭建k8s&#xff0c;由于搭建流程复杂&#xff0c;在此记录。 需提前安装好VM&#xff08;可参考&#xff1a;VM安装&#xff09;&#xff0c;起两台虚拟机(模拟master和worker)&#xff0c;且VM里已安装好Docker&#xff08;可参考&#xff1a;D…