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.pswp.cn/diannao/36548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36548.shtml
英文地址,請注明出處:http://en.pswp.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;與文件或目錄關聯的用戶組。組成員共享文件的組權限…