如何使用 Pytorch Lightning 啟用早停機制

【PL 基礎】如何啟用早停機制

  • 摘要
  • 1. on_train_batch_start()
  • 2. EarlyStopping Callback

摘要

??本文介紹了兩種在 PyTorch Lightning 中實現早停機制的方法。第一種是通過重寫on_train_batch_start()方法手動控制訓練流程;第二種是使用內置的EarlyStopping回調,可以監控驗證指標并在指標停止改善時自動停止訓練。文章詳細說明了EarlyStopping的參數設置,包括監控指標、模式選擇、耐心值等核心參數,以及停止閾值、發散閾值等進階參數。同時介紹了如何通過子類化修改早停觸發時機,并提醒注意驗證頻率與耐心值的配合使用。文末提供了完整的代碼示例,展示了如何在實際訓練中配置和使用早停機制。

1. on_train_batch_start()

??通過重寫 on_train_batch_start() 方法,在滿足特定條件時提前返回,從而停止并跳過當前epoch的剩余訓練批次。

??如果對于最初要求的每個epoch重復這樣做,將停止整個訓練。

2. EarlyStopping Callback

??EarlyStopping 回調可用于監控指標,并在沒有觀察到改善時停止訓練。

要啟用此功能,請執行以下操作:

  • 導入 EarlyStopping 回調模塊;

  • 使用 log() 方法記錄需要監控的指標;

  • 初始化回調并設置要監控的指標名稱(monitor 參數);

  • 根據指標特性設置監控模式(mode 參數);

  • EarlyStopping 回調傳遞給 Trainercallbacks 參數。

from lightning.pytorch.callbacks.early_stopping import EarlyStoppingclass LitModel(LightningModule):def validation_step(self, batch, batch_idx):loss = ...self.log("val_loss", loss)model = LitModel()
trainer = Trainer(callbacks=[EarlyStopping(monitor="val_loss", mode="min")])
trainer.fit(model)

可以通過更改其參數來自定義回調行為。

early_stop_callback = EarlyStopping(monitor="val_accuracy", min_delta=0.00, patience=3, verbose=False, mode="max")
trainer = Trainer(callbacks=[early_stop_callback])

用于在極值點停止訓練的附加參數:

  • stopping_threshold(停止閾值):當監控指標達到該閾值時立即終止訓練。適用于已知超過特定最優值后模型不再提升的場景。

  • divergence_threshold(發散閾值):當監控指標劣化至該閾值時即刻停止訓練。當指標惡化至此程度時,我們認為模型已無法恢復,此時應提前終止并嘗試不同初始條件。

  • check_finite(有限值檢測):啟用后,若監控指標出現NaN(非數值)或無窮大時終止訓練。

  • check_on_train_epoch_end(訓練周期結束檢測):啟用后,在訓練周期結束時檢查指標。僅當監控指標通過周期級訓練鉤子記錄時才需啟用此功能。

若需在訓練過程的其他階段啟用早停機制,請通過創建子類繼承 EarlyStopping 類并修改其調用位置:

class MyEarlyStopping(EarlyStopping):def on_validation_end(self, trainer, pl_module):# override this to disable early stopping at the end of val looppassdef on_train_end(self, trainer, pl_module):# instead, do it at the end of training loopself._run_early_stopping_check(trainer)

默認情況下,EarlyStopping 回調會在每個驗證周期結束時觸發。但驗證頻率可通過 Trainer 中的參數調節,例如通過設置 check_val_every_n_epoch(每N個訓練周期驗證一次)和 val_check_interval(驗證間隔)。需特別注意:patience(耐心值)統計的是驗證結果未提升的次數,而非訓練周期數。因此當設置 check_val_every_n_epoch=10patience=3 時,訓練器需經歷至少 40個訓練周期才會停止。

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

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

相關文章

深入理解前綴和與差分算法及其C++實現

前綴和與差分是算法競賽和編程中非常重要的兩種技巧,它們能夠高效地處理區間查詢和區間更新問題。本文將詳細介紹這兩種算法的原理、應用場景以及C實現。 一、前綴和算法 1.1 前綴和的基本概念 前綴和(Prefix Sum)是一種預處理技術&#x…

HugeGraph【部署】Linux單機部署

注: hugegraph從版本 1.5.0 開始,需要 Java11 運行時環境 一、安裝JDK11 1.下載JDK11 https://www.oracle.com/java/technologies/downloads/#java11 2.解壓縮包 tar -zxvf jdk-11.0.27_linux-x64_bin.tar.gz 3.修改/etc/profile環境變量 export JAVA_HOME/usr…

C++異步編程里避免超時機制

C標準庫中時鐘(Clock) 這段內容主要介紹了C標準庫中**時鐘(Clock)**的概念和分類,以及它們在時間測量中的作用。以下是關鍵信息的解讀: 一、時鐘的核心特性 C中的時鐘是一個類,提供以下四個基…

npm install安裝不成功(node:32388)怎么解決?

如果在執行 npm install 時出現問題,尤其是 node:32388 相關的錯誤,這通常意味著某些依賴或配置出了問題。這里有一些常見的解決方法,你可以嘗試: 1. 清除 npm 緩存 有時候,npm 緩存問題會導致安裝失敗。你可以清除 …

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更換國內鏡像軟件源 筆記250702

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list更換國內鏡像軟件源 筆記250702 為 Ubuntu 18.04 LTS(代號 Bionic Beaver)更換 /etc/apt/sources.list 為國內鏡像源 備份/etc/apt/sources.list文件 sudo cp -a /etc/apt/sources.list /etc/apt/sou…

【運維系列】【ubuntu22.04】安裝GitLab

一.下載安裝文件 rootgitlab:~# wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/9/gitlab-ce-17.4.0-ce.0.el9.x86_64.rpm二.執行安裝腳本 2.1 先執行安裝前的命令 rootgitlab:~# apt install -y perl-interpreter rootgitlab:~# apt install -y openssh-s…

Cisco ASA防火墻查看ACL的條目數量

這里顯示的條目數量為ACE, ACE是啥? ACE全稱: access-list entry ACE指的是ACL條目展開后的數量, 啥叫展開? 示例: access-list out-in extend permit tcp80&443 host 1.1.1.1 host 2.2.2.2這種配置是占1條&#…

npm install安裝的node_modules是什么

node_modules 是一個由 npm(Node Package Manager)管理的文件夾,存放著你的 Node.js 項目中所有安裝的依賴包。當你運行 npm install 時,npm 會根據你的項目中 package.json 文件中的依賴配置,下載并安裝相應的包到 no…

【實時Linux實戰系列】實時Linux項目的部署與維護

在實時 Linux 項目的開發過程中,開發階段的工作僅僅是開始,生產環境中的部署與維護同樣至關重要。實時 Linux 系統廣泛應用于工業自動化、航空航天、智能交通等對實時性和穩定性要求極高的領域。例如,在工業自動化中,實時系統的部…

Go并發模式精要:掌握Goroutine與Channel的實戰藝術

在現代軟件開發中,有效利用并發能力已成為提升系統性能的關鍵。Go語言憑借其原生的Goroutine和Channel機制,為開發者提供了優雅的并發解決方案。本文將深入解析Go并發編程的核心模式與最佳實踐。 一、并發基石:Goroutine與Channel // 輕量級…

第29篇:Linux審計系統深度解析:基于OpenEuler 24.03的實踐指南

Linux審計系統深度解析:基于OpenEuler 24.03的實踐指南 文章目錄 Linux審計系統深度解析:基于OpenEuler 24.03的實踐指南一、Linux審計系統核心概念與組件架構1.1 審計系統核心組件詳解1. auditd守護進程:日志持久化引擎2. auditctl命令行工具…

Linux 啟動過程流程圖--ARM版

以下是ARM版本Linux啟動過程的超詳細樹狀圖,涵蓋硬件上電到應用程序交互的全流程,并包含關鍵函數調用鏈及源碼位置,適用于系統開發與調試場景: ARM Linux啟動全流程(含函數調用鏈) ARM Linux啟動流程&…

NVMe高速傳輸之擺脫XDMA設計6之系統架構設計

結合目前應用需求,以及前面基礎分析,確定IP應具有如下特色: (1) 通用性 前端數據采集系統基于 FPGA 開發。 一方面, 設備類型多, 使用的 FPGA型號各不相同, 需要實現的設計能夠在多種…

Mac homebrew 安裝教程

下載github安裝包 https://github.com/Homebrew/brew/releases/tag/4.5.8 下載安裝后 打開 安全里面允許安裝,就可以直接使用了

stm32hal模塊驅動(1)hpdl1414驅動

之前一直想用hpdl1414畫一塊手表,前面pcb測試板畫完沒空調試,最近剛好空出來時間,遂發下驅動。 這里簡單贅述hpdl1414的驅動原理:D0-D6負責數據輸入(ascii表后7位),A0,A1負責更改hpdl1414模塊顯…

從代碼學習深度強化學習 - TRPO PyTorch版

文章目錄 前言核心工具函數廣義優勢估計 (Generalized Advantage Estimation, GAE)案例一:TRPO 解決離散動作問題 (CartPole-v1)1. 環境初始化2. 網絡結構定義3. TRPO 智能體實現4. 訓練與可視化5. 訓練主程序與結果案例二:TRPO 解決連續動作問題 (Pendulum-v1)1. 環境與工具…

MySQL 升級到8.4版本的詳細指南

本指南詳細介紹了將 MySQL 升級到 8.4 版本的完整流程、注意事項和操作方法。 一、升級前準備 (3.1 Before You Begin) 在開始升級之前,必須仔細審閱本節信息并執行所有推薦的操作: 理解升級過程:了解升級期間可能發生的情況。請參閱第 3.4…

leetcode427.建立四叉樹

區間x0到x1和區間y0到y1都是左閉右開的 解題基本思路是先判斷當前矩陣是不是全0或全1,如果是就直接返回新建的一個節點值(矩陣的統一值,葉子節點),如果不是那就新建一個節點值,非葉并且左上右上左下右下四個方向上遞歸創建節點 /…

醫學+AI教育實踐!南醫大探索數據挖掘人才培養,清華指導發布AI教育白皮書

教育數字化浪潮正以前所未有的力度重塑高等教育格局。今年4月,為貫徹落實《教育強國建設規劃綱要(2024—2035 年)》,教育部等九部門印發《關于加快推進教育數字化的意見》,表明將持續推動“人工智能教育”全方位發展&a…

PDF處理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平臺兼容性和安全穩定的格式特點,廣泛應用于企業文檔管理和電子資料傳輸中。隨著PDF文檔頁數和內容復雜度的增加,拆分PDF成為優化文檔處理流程、提升辦公效率的重要需求。通過編程方式實現PDF拆分,不僅能自動化處理海量文…