YOLOV8替换Lion优化器
创始人
2024-11-12 06:34:03

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。

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

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...