深度學習中學習率調整策略

學習率衰減策略是深度學習優化過程中的一個關鍵因素,它決定了訓練過程中學習率的調整方式,從而影響模型收斂的速度和效果。不同的衰減策略在不同的任務和模型上可能有不同的表現,下面從我用到過的幾個衰減策略進行記錄,后續慢慢跟進。

為什么需要學習率衰減?

在訓練深度學習模型時,學習率的選擇至關重要。通常,我們希望模型能夠在訓練的早期階段較快地收斂(即較大的學習率),而在訓練的后期階段逐漸減小學習率,以便模型能夠更精細地調整參數,避免錯過局部最優點。

階梯衰減Step Decay

這是最簡單常用的學習率調整方法,每過step_size輪,將此前的學習率乘以gamma。

torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

余弦退火調整學習率 CosineAnnealingLR

在每個周期內,學習率從初始學習率(lr0)開始,經過余弦函數的逐漸衰減,最后衰減到最小學習率(eta_min)。

torch.optim.lr_scheduler.CosineAnnealingLR(
optimizer, 
T_max,     
eta_min=0,
last_epoch=-1)

T_max:指定一個完整的周期(例如,多少個訓練步長或 epoch)。在 T_max 的周期內,學習率會從初始學習率衰減到 eta_min

eta_min=0:最終學習率

last_epoch=-1:指定上次訓練的最后一個epoch,-1就是從頭開始訓練

余弦退火重啟學習率 CosineAnnealingWarmRestarts

CosineAnnealingWarmRestarts 通過將學習率沿著一個余弦曲線逐漸衰減到最小值(eta_min),然后在周期結束時重啟并回升到初始學習率(lr0),這種周期性的重啟和余弦退火幫助模型在每個階段進行不同范圍的探索,避免陷入局部最優。

scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
optimizer, 
T_0, 
T_mult=1, 
eta_min=0,
last_epoch=- 1, 
verbose=False)

T_0:第一個周期的長度,后續的長度基于T0和T_mult調整

T_mult:控制后續周期的長度,例如設置為2,那則第二個周期長度會是第一個周期的2倍,第三個周期的長度會是第二個周期的2倍,設置為1則每個周期一樣長。

eta_min:這是學習率的最小值。在每個周期中,學習率會從 eta_max(初始學習率)衰減到 eta_min,然后在每個周期結束時重新回升到初始學習率。
verbose:如果設置為 True,則每次學習率重啟時,調度器會輸出日志信息,顯示學習率調整的情況。例如,輸出每次重啟時的學習率和當前的訓練狀態。

線性衰減 Linear Decay

在線性衰減中,學習率隨著訓練的進展而線性地減小。學習率的減少是均勻的,每個時間步減少固定的量,直到達到預定的最小值

torch.optim.lr_scheduler.LinearLR(
optimizer,
start_factor=1,
end_factor=0.1,
total_iters=80)

LinearLR是線性學習率,給定起始factor和最終的factor,LinearLR會在中間階段做線性插值,比如學習率為0.1,起始factor為1,最終的factor為0.1,那么第0次迭代,學習率將為0.1,最終輪學習率為0.01。下面設置的總輪數total_iters為80,所以超過80時,學習率恒為0.01。

指數衰減 Exponential Decay

學習率初期迅速下降,適合早期跳出局部最優,但可能導致后期過早收斂,適合大規模訓練任務或對收斂速度有要求的情況。

torch.optim.lr_scheduler.ExponentialLR(
optimizer,
gamma=0.9)

ExponentialLR是指數型下降的學習率調節器,每一輪會將學習率乘以gamma,所以這里千萬注意gamma不要設置的太小,不然幾輪之后學習率就會降到0。

可視化

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73330.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaCV

調用攝像頭 public class Camera {public static void main(String[] args) throws FrameGrabber.Exception {// 開啟抓取器OpenCVFrameGrabber grabber new OpenCVFrameGrabber(0);grabber.start();// 開啟窗口CanvasFrame canvasFrame new CanvasFrame("OpenCV Frame…

凝思linux修改mac地址

臨時性修改 /sbin/ifconfig eth0 hw ether 00:0C:29:36:97:20

前端UI編程基礎知識:基礎三要素(結構→表現→行為)

以下是重新梳理的前端UI編程基礎知識體系&#xff0c;結合最新技術趨勢與實戰要點&#xff0c;以更適合快速掌握的邏輯結構呈現&#xff1a; 一、基礎三要素&#xff08;結構→表現→行為&#xff09; 1. HTML5 核心能力 ? 語義化標簽&#xff1a;<header>, <nav&g…

面試題:實現學生管理系統

這是我在以前面試中遇到的一個問題&#xff0c; 面試官說&#xff1a;你能現場實現一個學生管理系統嗎&#xff0c;實現對學生的增刪查改這4個功能 當時寫了半天沒寫出來.....&#xff0c;所以我在這里記錄一下 10分鐘實現學生管理系統并實現 增刪查改 功能 #include <iostr…

大語言模型基礎—語言模型的發展歷程--task1

目錄 1.語言模型的發展歷程 1.1 統計語言模型 1.2 神經語言模型 1.3 預訓練語言模型 1.4 大語言模型 1.5 總結 1.6 各階段對比與演進邏輯 1.語言模型的發展歷程 語言模型的發展歷程經歷了四個主要階段&#xff1a;統計語言模型、神經語言模型、預訓練語言模型和大語言模…

BIG_EVENT

環境準備: 開發: 跨域問題: 只有瀏覽器才存在跨域問題, 此時瀏覽器的地址和前端服務一致,所以不存在跨域問題, 但是當瀏覽器中的js代碼需要向8080發送請求時就會由于存在跨域問題而失敗. 簡單的說前端和瀏覽器的地址端口是一致的,瀏覽器只能向前端服務發送請求, 所以可以使用配…

DAY33 貪心算法Ⅱ

122. 買賣股票的最佳時機 II - 力扣&#xff08;LeetCode&#xff09; 想到把整體利潤分解為每天的利潤&#xff0c;就豁然開朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…

【Qt】qApp簡單介紹

1. 介紹 在Qt中&#xff0c;qApp是一個全局指針&#xff0c;它指向當前的QApplication或QGuiApplication對象。這個全局指針在Qt應用程序中非常有用&#xff0c;因為它可以讓你在任何地方訪問到應用程序對象。 在C中&#xff0c;全局指針是一個可以在程序的任何地方訪問的指針…

Redis 設置密碼無效問題解決

一、驗證密碼有沒有生效 運行cmd&#xff0c;cd到redis的目錄下 輸入“redis-cli.exe” 回車 輸入“auth 123456” 回車 若錯誤&#xff0c;說明沒有設置密碼或者設置的密碼沒有生效 輸入“exit” 回車就立即退出redis 二、解決方案是&#xff1a;直接修改后綴是 .conf 的…

手寫一些常見算法

手寫一些常見算法 快速排序歸并排序Dijkstra自定義排序交替打印0和1冒泡排序插入排序堆排序 快速排序 public class Main {public static void main(String[] args) {int nums[] {1,3,2,5,4,6,8,7,9};quickSort(nums,0,nums.length - 1);}private static void quickSort(int[…

VBA即用型代碼手冊:選擇、轉到Select、 Go To

我給VBA下的定義&#xff1a;VBA是個人小型自動化處理的有效工具。可以大大提高自己的勞動效率&#xff0c;而且可以提高數據的準確性。我這里專注VBA,將我多年的經驗匯集在VBA系列九套教程中。 作為我的學員要利用我的積木編程思想&#xff0c;積木編程最重要的是積木如何搭建…

[CISSP] [1] 訪問控制//入侵檢測與網絡防護

訪問控制 檢測性訪問控制&#xff08;Detective Access Control&#xff09; 作用&#xff1a;用于發現和記錄未經授權的活動。方式&#xff1a;這類控制本身不直接阻止攻擊或違規行為&#xff0c;而是監測、檢測并記錄這些事件&#xff0c;以便后續調查或響應。例子&#xff1…

【SpringBoot】MD5加鹽算法的詳解

目錄 一、什么是加鹽算法 二、如何實現加鹽算法 2.1 加鹽算法代碼實現 2.2 注冊頁面中進行密碼加鹽 2.3 登錄頁面進行加鹽的解密 2.4 注冊和登錄 一、什么是加鹽算法 加鹽算法是一種用于增強密碼安全性的技術。這種技術通過在密碼存儲過程中添加一個隨機生成的鹽值&…

uniapp移動端圖片比較器組件,仿英偉達官網rtx光追圖片比較器功能

組件下載地址&#xff1a;https://ext.dcloud.net.cn/plugin?id22609 已測試h5和微信小程序&#xff0c;理論支持全平臺 亮點&#xff1a; 簡單易用 使用js計算而不是resize屬性&#xff0c;定制化程度更高 組件掛在后可播放指示線動畫&#xff0c;提示用戶可以拖拽比較圖片…

CI/CD—Jenkins實現自動構建Docker鏡像運行Java程序

實現原理 1、Java代碼中創建一個dockerfile文件 --> 2、代碼上傳至GitLab --> 3、Jenkins同步GitLab的代碼進行構建生成jar --> 4、Jenkins將jar包和dockerfile文件傳到測試服務器上 --> 5、在測試服務器上執行dockerfile構建jar鏡像 --> 6、鏡像構建完運行容器…

docker 搭建alpine下nginx1.26/mysql8.0/php7.4環境

docker 搭建alpine下nginx1.26/mysql8.0/php7.4環境 docker-compose.yml services:mysql-8.0:container_name: mysql-8.0image: mysql:8.0restart: always#ports:#- "3306:3306"volumes:- ./etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro- ./var/log…

隊列的簡單例題

題目如下 模擬隊列 首先你要明白隊列的話 只有隊尾才能進行新增&#xff0c;也就是入隊 只有隊首才能出隊&#xff0c;也就是刪除 隊首隊尾指針一開始默認都是0 相當于隊列中一開始是有一個元素的就是 0的位置 隊首指針head0 隊尾指針tail0 1.入隊也就是隊尾要先賦值&#xf…

vue3+elementuiplus的table表格動態高度

table表格流體高度 1、前提 了解自定義指令、hooks 2、核心思路 通過自定義指令&#xff08;new ResizeObserver&#xff09;監聽表格變化&#xff0c;然后通過hooks去更新表格高度。 3、核心代碼 src/directives/resize.ts // import { debounce } from /utils;import { t…

Apache POI詳解

目錄 前言 Apache POI是一個強大的Java庫&#xff0c;廣泛用于處理Microsoft Office文檔&#xff0c;包括Word、Excel和PowerPoint等。本文將詳細介紹如何使用Apache POI庫操作Word模板&#xff08;包括替換占位符、操作表格&#xff09;、將Word文檔轉換為PDF&#xff0c;以及…

AutoGen多角色、多用戶、多智能體對話系統

2023-03-11-AutoGen 使用【autoGenchainlitdeepSeek】實現【多角色、多用戶、多智能體對話系統】 1-核心思路 01&#xff09;技術要點&#xff1a;autoGenchainlitdeepSeek02&#xff09;什么是autoGen->autogen是微軟旗下的多智能體的框架03&#xff09;什么是chainlit-&g…