深度學習--卷積神經網絡調整學習率

文章目錄

  • 前言
  • 一、學習率
    • 1、什么學習率
    • 2、什么是調整學習率
    • 3、目的
  • 二、調整方法
    • 1、有序調整
      • 1)有序調整StepLR(等間隔調整學習率)
      • 2)有序調整MultiStepLR(多間隔調整學習率)
      • 3)有序調整ExponentialLR (指數衰減調整學習率)
      • 4)有序調整CosineAnnealing (余弦退火函數調整學習率)
    • 2、自適應調整
      • 1)自適應調整ReduceLROnPlateau (根據指標調整學習率)
    • 3、自定義調整
      • 1)自定義調整LambdaLR (自定義調整學習率)
  • 三、代碼參考
  • 總結


前言

在深度學習中,學習率(Learning Rate) 是優化算法中最重要的超參數之一。對于卷積神經網絡(CNN)而言,合理的學習率調整策略直接影響模型的收斂速度、訓練穩定性和最終性能。本文將系統性地介紹CNN訓練中常用的學習率調整方法,并結合PyTorch代碼示例和實踐經驗,幫助讀者掌握這一關鍵技巧。


一、學習率

1、什么學習率

??學習率是優化算法中一個重要的超參數,用于控制模型參數在每次更新時的調整幅度。學習率決定了模型在參數空間中搜索的步長大小。調整學習率是指在訓練過程中根據需要改變學習率的值。

2、什么是調整學習率

??常用的學習率有0.1、0.01以及0.001等,學習率越大則權重更新越快。一般來說,我們希望在訓練初期學習率大一些,使得網絡收斂迅速,在訓練后期學習率小一些,使得網絡更好的收斂到最優解。

  • 使用庫函數進行調整
  • 手動調整學習率
    在這里插入圖片描述

3、目的

?? 調整學習率的目的是為了能夠更好地優化模型,避免訓練過程中出現的一些問題,如梯度爆炸或梯度消失、陷入局部極小值等。

二、調整方法

Pytorch學習率調整策略通過 torch.optim.lr_sheduler 接口實現,本篇介紹3種庫函數調整方法:
(1)有序調整:等間隔調整(Step),多間隔調整(MultiStep),指數衰減(Exponential),余弦退火(CosineAnnealing);
(2)自適應調整:依訓練狀況伺機而變,通過監測某個指標的變化情況(loss、accuracy),當該指標不怎么變化 時,就是調整學習率的時機(ReduceLROnPlateau);
(3)自定義調整:通過自定義關于epoch的lambda函數調整學習率(LambdaLR)。
在這里插入圖片描述

1、有序調整

1)有序調整StepLR(等間隔調整學習率)

"""等間隔調整"""
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1)
# optimizer: 神經網絡訓練中使用的優化器,
# 如optimizer = torch.optim.Adam(model.parameters(),lr=0.001)
# step_size(int): 學習率下降間隔數,單位是epoch,而不是iteration.
# gamma(float):學習率調整倍數,默認為0.1
# 每訓練step_size個epoch,學習率調整為lr=lr*gamma.

2)有序調整MultiStepLR(多間隔調整學習率)

"""多間隔調整"""
torch.optim.lr_shceduler.MultiStepLR(optimizer, milestones, gamma=0.1)
milestone(list): 一個列表參數,表示多個學習率需要調整的epoch值,
如milestones=[10, 30, 80],即10輪時將gamma乘以學習率lr,30輪時、80輪時

3)有序調整ExponentialLR (指數衰減調整學習率)

'''指數衰減調整'''
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma)
參數:
gamma(float):學習率調整倍數的底數,指數為epoch,初始值我lr, 倍數為γepoch,每一輪都調整.

4)有序調整CosineAnnealing (余弦退火函數調整學習率)

'''余弦退火函數調整'''
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0)
參數:
Tmax(int):學習率下降到最小值時的epoch數,即當epoch=T_max時,學習率下降到余弦函數最小值,當epoch>T_max時,學習率將增大;
etamin: 學習率調整的最小值,即epoch=Tmax時,lrmin=etamin, 默認為0.

2、自適應調整

當某指標(loss或accuracy)在最近幾個epoch中都沒有變化(下降或升高超過給定閾值)時,調整學習率。

1)自適應調整ReduceLROnPlateau (根據指標調整學習率)

"""根據指標調整學習率"""
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1,patience=10,verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
  • optimizer: 被包裝的優化器。

  • mode: 可以是 ‘min’ 或 ‘max’。如果是 ‘min’,當監測的指標停止下降時學習率會被降低;如果是

  • ‘max’,當指標停止上升時學習率會被降低。

  • factor: 學習率降低的因子,新的學習率會是舊學習率乘以這個因子。

  • patience: 在指標停止改善之后等待多少個周期才降低學習率。

  • threshold: 用于衡量新的最優值的閾值,只關注顯著的變化。

  • threshold_mode: 可以是 ‘rel’ 或 ‘abs’。在 ‘rel’ 模式下,動態閾值會根據最佳值和閾值的相對關系來設定;在 ‘abs’ 模式下,動態閾值會根據最佳值加上或減去閾值來設定。

  • cooldown: 在學習率被降低之后,等待多少個周期再繼續正常操作。

  • min_lr: 所有參數組或每個組的學習率的下限。

  • eps: 應用于學習率的最小衰減。如果新舊學習率之間的差異小于 eps,則忽略這次更新。

3、自定義調整

可以為不同層設置不同的學習率。

1)自定義調整LambdaLR (自定義調整學習率)

torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
參數:
lr_lambda(function or list): 自定義計算學習率調整倍數的函數,通常時epoch的函數,當有多個參數組時,設為list.

三、代碼參考

loss_fn = nn.CrossEntropyLoss()    # 創建交叉熵損失函數對象
optimizer = torch.optim.Adam(model.parameters(),lr=0.001)   #創建一個優化器,一開始lr可以大一些
scheduler = torch.optim.lr_scheduler.StepLR(optimizer,step_size=5,gamma=0.5)  # 調整學習率
"""optimizer是一個PyTorch優化器對象
step_size表示學習率調整的步長
gamma表示學習率的衰減因子,即每次調整后將當前學習率乘以gamma
""""""訓練模型"""
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)epochs = 10
acc_s = [] 
loss_s = []for t in range(epochs):print(f"Epoch {t+1}\n---------------------------")train(train_dataloader,model,loss_fn,optimizer)test(test_dataloader, model, loss_fn)scheduler.step()
print(bast_acc)

總結

沒有"放之四海皆準"的最優策略,通過實驗找到適合具體任務的方法才是王道。

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

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

相關文章

【消息隊列RocketMQ】四、RocketMQ 存儲機制與性能優化

一、RocketMQ 存儲機制詳解 1.1 存儲文件結構? RocketMQ 的存儲文件主要分布在store目錄下,該目錄是在broker.conf配置文件中通過storePathRootDir參數指定的,默認路徑為${user.home}/store 。主要包含以下幾種關鍵文件類型:? 1.1.1 Comm…

C++入門小館: 探尋vector類

嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的pa…

CSS-跟隨圖片變化的背景色

CSS-跟隨圖片變化的背景色 獲取圖片的主要顏色并用于背景漸變需要安裝依賴 colorthief獲取圖片的主要顏色. 并丟給背景注意 getPalette并不是個異步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…

RAGFlow:構建高效檢索增強生成流程的技術解析

引言 在當今信息爆炸的時代,如何從海量數據中快速準確地獲取所需信息并生成高質量內容已成為人工智能領域的重要挑戰。檢索增強生成(Retrieval-Augmented Generation, RAG)技術應運而生,它將信息檢索與大型語言模型(L…

SpringBoot應用:MyBatis的select語句如何返回數組類型

在SpringBoot應用中&#xff0c;比如想返回一個表的主鍵id構成的Long型數組Long[]&#xff0c;需要在XxxMapper.xml文件中這樣定義select語句&#xff1a; <select id"selectIds" parameterType"int" resultType"Long">select id from sy…

【HFP】藍牙HFP協議來電處理機制解析

目錄 一、協議概述與技術背景 1.1 HFP協議演進 1.2 核心角色定義 1.3 關鍵技術指標 二、來電接入的核心交互流程 2.1 基礎流程概述&#xff1a;AG 的 RING 通知機制 2.2 HF 的響應&#xff1a;本地提醒與信令交互 三、帶內鈴聲&#xff08;In-Band Ring Tone&#xff0…

【每天一個知識點】如何解決大模型幻覺(hallucination)問題?

解決大模型幻覺&#xff08;hallucination&#xff09;問題&#xff0c;需要從模型架構、訓練方式、推理機制和后處理策略多方面協同優化。 &#x1f9e0; 1. 引入 RAG 框架&#xff08;Retrieval-Augmented Generation&#xff09; 思路&#xff1a; 模型生成前先檢索知識庫中…

基于STC89C52RC和8X8點陣屏、獨立按鍵的小游戲《打磚塊》

目錄 系列文章目錄前言一、效果展示二、原理分析三、各模塊代碼1、8X8點陣屏2、獨立按鍵3、定時器04、定時器1 四、主函數總結 系列文章目錄 前言 用的是普中A2開發板&#xff0c;外設有&#xff1a;8X8LED點陣屏、獨立按鍵。 【單片機】STC89C52RC 【頻率】12T11.0592MHz 效…

C++學習:六個月從基礎到就業——C++學習之旅:STL迭代器系統

C學習&#xff1a;六個月從基礎到就業——C學習之旅&#xff1a;STL迭代器系統 本文是我C學習之旅系列的第二十四篇技術文章&#xff0c;也是第二階段"C進階特性"的第二篇&#xff0c;主要介紹C STL迭代器系統。查看完整系列目錄了解更多內容。 引言 在上一篇文章中…

leetcode刷題——判斷對稱二叉樹(C語言版)

題目描述&#xff1a; 示例 1&#xff1a; 輸入&#xff1a;root [6,7,7,8,9,9,8] 輸出&#xff1a;true 解釋&#xff1a;從圖中可看出樹是軸對稱的。 示例 2&#xff1a; 輸入&#xff1a;root [1,2,2,null,3,null,3] 輸出&#xff1a;false 解釋&#xff1a;從圖中可看出最…

無法右鍵下載文檔?網頁PDF下載方法大全

適用場景&#xff1a;繞過付費限制/無法右鍵下載/動態加載PDF 方法1&#xff1a;瀏覽器原生下載&#xff08;成功率60%&#xff09; Chrome/Edge&#xff1a; 在PDF預覽頁點擊工具欄 ??下載圖標&#xff08;右上角&#xff09; 快捷鍵&#xff1a;CtrlS → 保存類型選PDF …

基于缺失數據的2024年山東省專項債發行報告

一、數據情況 本次報告選取了山東省財政局公開的2024年專項債數據,共計2723條,發行期數是從第1期到第58期,由于網絡原因,其中25期到32期,54到57期的數據有缺失,如下圖所示。 從上圖看出,一年52周,平均每周都有一期發布,因此持續做專項債的謀劃很重要,一定要持續謀劃…

Ubuntu數據連接訪問崩潰問題

目錄 一、分析問題 1、崩潰問題本地調試gdb調試&#xff1a; 二、解決問題 1. 停止 MySQL 服務 2. 卸載 MySQL 相關包 3. 刪除 MySQL 數據目錄 4. 清理依賴和緩存 5.重新安裝mysql數據庫 6.創建程序需要的數據庫 三、驗證 1、動態庫更新了 2、頭文件更新了 3、重新…

Linux系統編程 day10 接著線程(中期頭大,還要寫論文)

線程有點懵逼 線程之前函數回顧以及總結部分&#xff08;對不清楚的問題再思考&#xff09; 線程控制原語 進程控制原語 pthread_create(); fork(); pthread_self(); getpid(); pthread_exit(); exit(); pthread_join(); …

《潯川AI翻譯v6.1.0問題已修復公告》

《潯川AI翻譯v6.1.0問題已修復公告》 尊敬的潯川AI翻譯用戶&#xff1a; 感謝您對潯川AI翻譯的支持與反饋&#xff01;我們已針對 **v6.1.0** 版本中用戶反饋的多個問題進行了全面修復&#xff0c;并優化了系統穩定性。以下是本次修復的主要內容&#xff1a; 已修復問題 ?…

深入理解 java synchronized 關鍵字

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;…

華三(H3C)與華為(Huawei)設備配置IPsec VPN的詳細說明,涵蓋配置流程、參數設置及常見問題處理

以下是針對華三&#xff08;H3C&#xff09;與華為&#xff08;Huawei&#xff09;設備配置IPsec VPN的詳細說明&#xff0c;涵蓋配置流程、參數設置及常見問題處理&#xff1a; 一、華三&#xff08;H3C&#xff09;設備IPsec VPN配置詳解 1. 配置流程 華三IPsec VPN配置主要…

KBEngine 源代碼分析(一):pyscript 目錄文件介紹

pyscript 目錄文件 pyscript 目錄提供了 KBEngine 把 C++ 代碼中的類注冊到 Python 的機制 同時也提供了 C++ 調用 Python 方法的例子 相對現在的 C++ 17/20 ,這個目錄的分裝相對不優雅 不過不影響學習如何使用 Python 官方庫提供的 API ,實現 C++ Python 混合編程 C++ …

線程入門3

synchronized修飾方法 synchronized可以修飾代碼塊(在線程入門2中有例子)&#xff0c;也可以修飾普通方法和靜態方法。 修飾普通方法 修飾普通方法簡化寫法&#xff1a; 修飾靜態方法 修飾靜態方法簡化寫法&#xff1a; 注意&#xff1a;利用synchronized上鎖&#xff0c;鎖的…

linux上Flexlm命令

FlexLM 是一種靈活的許可證管理系統&#xff0c;廣泛用于各種軟件產品中&#xff0c;如 Autodesk 的 AutoCAD 和 Autodesk 的其他產品。它允許軟件開發商控制軟件的使用和分發&#xff0c;同時提供靈活的許可證管理策略。在 Linux 系統中使用 FlexLM 通常涉及到幾個關鍵步驟&am…