torch.optim.lr_scheduler.ReduceLROnPlateau

torch.optim.lr_scheduler.ReduceLROnPlateau 是 PyTorch 中的一種學習率調度器,主要用于在模型訓練過程中根據某些指標(如驗證損失)動態調整學習率。它是一種基于性能指標動態調整學習率的策略,而不是預定義的固定時間調整。


主要功能

ReduceLROnPlateau 會監控某個指標(如驗證損失),當該指標在若干個 epoch 中停止改善時(即進入"平臺"期),將學習率按一定的比例降低,從而幫助模型更好地收斂。


常用參數

初始化 ReduceLROnPlateau 時,可以設置以下參數:

  1. optimizer:

    • 目標優化器(如 SGD, Adam),學習率調度器會更新此優化器中的學習率。
  2. mode:

    • 決定監控指標是否需要"最小化"或"最大化"。
    • 'min':監控指標越小越好(例如驗證損失)。
    • 'max':監控指標越大越好(例如驗證精度)。
  3. factor:

    • 學習率降低的比例,新的學習率為 lr = lr * factor
    • 默認值:0.1(學習率每次降低為原來的 10%)。
  4. patience:

    • 容忍的連續 epoch 數,在這段時間內監控指標沒有改善,但不會立即降低學習率。
    • 默認值:10
  5. threshold:

    • 判斷監控指標是否改善的閾值。
    • 默認值:1e-4(小于這個值的變化會被認為沒有改善)。
  6. threshold_mode:

    • 'rel':相對變化(即與前一個值相比的比例變化)。
    • 'abs':絕對變化。
  7. cooldown:

    • 每次調整學習率后等待的 epoch 數,在此期間不會檢測指標改善。
    • 默認值:0
  8. min_lr:

    • 學習率的下限,確保學習率不會被降低到此值以下。
    • 默認值:0
  9. eps:

    • 學習率變化的最小值,防止浮點數精度問題導致學習率更新失敗。
    • 默認值:1e-8

常見用法

以下是使用 ReduceLROnPlateau 的典型步驟:

  1. 初始化優化器和調度器

    import torch
    import torch.nn as nn
    import torch.optim as optim# 假設有一個模型和一個損失函數
    model = nn.Linear(10, 1)
    criterion = nn.MSELoss()
    optimizer = optim.Adam(model.parameters(), lr=0.01)# 初始化調度器
    scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10)
    
  2. 在訓練循環中調用
    每個 epoch 完成后,使用驗證集的性能指標來調用調度器:

    for epoch in range(50):# 訓練過程model.train()for data, target in train_loader:optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()# 驗證過程model.eval()val_loss = 0with torch.no_grad():for data, target in val_loader:output = model(data)val_loss += criterion(output, target).item()# 調度器監控驗證損失scheduler.step(val_loss)# 打印當前學習率print(f"Epoch {epoch+1}: Learning rate: {optimizer.param_groups[0]['lr']}")
    

工作原理

  1. 監控指標

    • 每次調用 scheduler.step(metric),都會檢查傳入的 metric(如驗證損失或驗證精度)是否在過去 patience 個 epoch 中有所改善。
  2. 判斷是否降低學習率

    • 根據 modethreshold,決定當前指標是否"足夠好"。
    • 如果監控指標在 patience 個 epoch 內未改善,則將學習率乘以 factor
  3. 冷卻期

    • 調整學習率后,進入 cooldown 冷卻期,冷卻期內不會監控指標。
  4. 最小學習率限制

    • 如果新的學習率低于 min_lr,則不再繼續降低。

代碼示例

假設驗證損失在第 15 個 epoch 開始停滯:

Epoch 10: val_loss = 0.50, lr = 0.01
Epoch 11: val_loss = 0.49, lr = 0.01
...
Epoch 15: val_loss = 0.48, lr = 0.01  (No significant improvement for 10 epochs)
Epoch 16: val_loss = 0.47, lr = 0.001 (Reduce learning rate by factor of 0.1)
...
Epoch 25: val_loss = 0.46, lr = 0.001 (No significant improvement for 10 epochs)
Epoch 26: val_loss = 0.45, lr = 0.0001 (Reduce learning rate again)

注意事項

  1. 適用場景

    • 常用于訓練到一定階段后,指標改善速度減慢時,動態調整學習率有助于提高模型性能。
    • 尤其適合學習率對訓練敏感的優化器(如 SGD)。
  2. 與其他調度器對比

    • StepLRCosineAnnealingLR 是預定義的固定時間調整學習率。
    • ReduceLROnPlateau 是基于性能指標的動態調整,更加靈活。
  3. 使用正確的監控指標

    • 確保傳入的指標與訓練目標一致(如驗證損失應與 mode='min' 一起使用)。

通過動態調整學習率,ReduceLROnPlateau 可以幫助優化訓練過程,特別是在模型性能進入瓶頸階段時,非常有效。

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

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

相關文章

ubuntu下的chattts 學習6:音色固定的學習

魔搭社區 該區提供了隨機種子級音樂的試聽與下載。 spk torch.load(<PT-FILE-PATH>) params_infer_code {spk_emb: spk, } 略 測試過程&#xff1a; 1.先建一個文件夾&#xff1a;然后從上面的網站上下載了兩個。放在里面測試 2 2.測試代碼 import ChatTTS impo…

數據集的重要性:如何構建AIGC訓練集

文章目錄 一、為什么數據集對AIGC如此重要&#xff1f;1. 數據決定模型的知識邊界2. 數據質量直接影響生成效果3. 數據集多樣性提升模型魯棒性 二、構建AIGC訓練集的關鍵步驟1. 明確目標任務和生成需求2. 數據源的選擇3. 數據清洗與預處理4. 數據標注5. 數據增強 三、針對不同類…

47 基于單片機的書庫環境監測

目錄 一、主要功能 二、硬件資源 三、程序編程 四、實現現象 一、主要功能 基于51單片機&#xff0c;采用DHT11濕度傳感器檢測濕度&#xff0c;DS18B20溫度傳感器檢測溫度&#xff0c; 采用滑動變阻器連接數模轉換器模擬二氧化碳和氧氣濃度檢測&#xff0c;各項數值通過lc…

【操作系統】每日 3 題(五十五)

?個人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;專欄地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;專欄簡介&#xff1a;在這個專欄中&#xff0c;我將會分享操作系統面試中常見的面試題給大家~ ??…

服務器加固

1.服務器密碼復雜度 密碼最小長度&#xff0c;密碼復雜度策略 vim /etc/pam.d/system-auth --------------- #密碼配置 #ucredit&#xff1a;大寫字母個數&#xff1b;lcredit&#xff1a;小寫字母個數&#xff1b;dcredit&#xff1a;數字個數&#xff1b;ocredit&#xff1a;…

spring boot 同一個redis 操作不同的庫

1.下面是在Spring Boot中配置多個Redis數據庫的幾種方式&#xff1a; 1.1 配置如下# application.yml spring:redis:host: localhostport: 6379password: your_password# 連接池配置lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: -1mstimeout: 5000ms# 多個數據…

C語言面試題/筆試題/高頻面試題_2

9. 全局變量和局部變量的區別 定義&#xff1a;全局變量是定義在函數外部的變量&#xff0c;局部變量是定義在 函數內部的變量 存儲位置&#xff1a;全局變量存儲在全局區&#xff0c;局部變量存儲在棧區 作用域&#xff1a;全局變量可以在程序任意位置使用&#xff0c;局部變量…

Brain.js(八):RNNTimeStep 實戰教程 - 股票價格預測 - 實操需警慎

前置聲明&#xff0c;個人淺度炒股&#xff0c;但計劃將基金轉入股市。然后 股市有風險&#xff0c;不是技術可以完全預測的&#xff0c;但是在無頭緒的時候&#xff0c;用技術指標做個參考也不錯。 本文涉及到的股票預測&#xff0c;只是代碼簡單示例&#xff0c;實操需警慎&a…

MySQL | 尚硅谷 | 第13章_約束

MySQL筆記&#xff1a;第13章_約束 文章目錄 MySQL筆記&#xff1a;第13章_約束第13章_約束 1. 約束(constraint)概述1.1 為什么需要約束1.2 什么是約束1.3 約束的分類演示代碼 2. 非空約束2.1 作用2.2 關鍵字2.3 特點2.4 添加非空約束2.5 刪除非空約束演示代碼 3. 唯一性約束3…

《計算機網絡》(408大題)

2009 路由轉發和靜態路由的計算 子網劃分、路由聚合的計算 注&#xff1a;CIDR中的子網號可以全為0或1&#xff0c;但是其主機號不允許。 注&#xff1a; 這里其實是把到互聯網的路由當做了一個默認路由&#xff08;當一個目的網絡地址與路由表中其他都不匹配時&#xff0c;…

NanoLog起步筆記-6-StaticLogInfo

nonolog起步筆記-6-StaticLogInfo StaticLogInfo文件名和行號文件名和行號的傳入log參數 RuntimeLogger::registerInvocationSitelogid為什么只能被賦一次值 reserveAlloc加入消息頭finishAlloc返回 StaticLogInfo 寫C語言編譯前端時&#xff0c;給我印象深刻的一部分是&#…

軟件工程 概述

軟件 不僅僅是一個程序代碼。程序是一個可執行的代碼&#xff0c;它提供了一些計算的目的。 軟件被認為是集合可執行的程序代碼&#xff0c;相關庫和文檔的軟件。當滿足一個特定的要求&#xff0c;就被稱為軟件產品。 工程 是所有有關開發的產品&#xff0c;使用良好定義的&…

Sui 集成 Phantom,生態迎來全新里程碑

作為領先的非托管多鏈加密&#x1f45b;&#xff0c;Phantom 宣布將支持 Sui 區塊鏈。Sui 將加入 Solana、Bitcoin 和 Ethereum 隊伍&#xff0c;成為該 wallet 支持的少數 L1 區塊鏈之一。 此次集成也大幅提升了 Phantom 的互操作性&#xff0c;同時表明 wallet 提供商和應用…

目標跟蹤領域經典論文解析

親愛的小伙伴們&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你對深度學習的奧秘、JAVA 、PYTHON與SAP 的奇妙世界&#xff0c;亦或是讀研論文的撰寫攻略有所探尋&#x1f9d0;&#xff0c;那不妨給我一個小小的關注吧&#x1f970;。我會精心籌備&#xff0c;在…

如何解決 java.nio.charset.CoderMalfunctionError: 編碼器故障錯誤問題?親測有效的解決方法!

java.nio.charset.CoderMalfunctionError 是一個在 Java 中相對較少遇到的異常&#xff0c;通常與字符編碼轉換過程中的錯誤有關。當 Java 程序在進行字符編碼轉換時&#xff0c;遇到無法處理的字符或編碼故障時&#xff0c;就會拋出該異常。 1. 問題描述 java.nio.charset.C…

低級爬蟲實現-記錄HCIP云架構考試

因工作需要考HCIP云架構&#xff08;HCIP-Cloud Service Solution Architect&#xff09;證書, 特意在淘寶上買了題庫&#xff0c; 考過了。 事后得知自己被坑了&#xff0c; 多花了幾十大洋。 所以想著在授權期內將題庫“爬”下來&#xff0c; 共享給大家。 因為整個過程蠻有…

QGroundControl之5-AppSettings.cc

介紹 應用程序設置 Application Settings &#xff0c;這里看下語言選擇功能&#xff0c;它是怎么和json文件關聯起來的&#xff0c;剛剛看的時候&#xff0c;很是奇怪這么多的json文件作用。 1.AppSettings.cc 文件怎么和App.SettingsGroup.json關聯 在AppSettings.cc文件沒…

jenkins郵件的配置詳解

Jenkins郵件的配置涉及多個步驟和細節,以下是詳細的配置指南: 一、前期準備 確定郵件服務:明確Jenkins將要使用的郵件服務,如QQ郵箱、163郵箱、公司郵箱(基于Microsoft 365或Exchange Server)等。獲取SMTP配置信息:根據郵件服務類型,獲取相應的SMTP服務器地址、端口號…

【ArcGIS微課1000例】0134:ArcGIS Earth實現二維建筑物的三維完美顯示

文章目錄 一、加載數據二、三維顯示三、三維符號化一、加載數據 加載配套實驗數據(0134.rar中的建筑物,2d或3d都可以),方法如下:點擊添加按鈕。 點擊【Add Files】,在彈出的Open對話框中,選擇建筑物,點擊確定,完成添加。 默認二維顯示: 二、三維顯示 右鍵建筑物圖層…

jupyterlab 增加多個kernel,正確做法

1、背景 需要增加一個kernel然后相當于隔離一個環境 juypterlab Version 3.0.14 2、用conda 安裝 例如&#xff0c;你在conda下有一個python 3.12 的環境 py312 ipython kernel install --user --namepy312 如果保持的話&#xff0c;用pip安裝相應的包就好 3、檢查是否配置好 …