模型調試實用技巧 (Pytorch Lightning)

【PL 基礎】模型調試實用技巧

  • 摘要
  • 1. 設置斷點
  • 2. 快速運行所有模型代碼一次
  • 3. 縮短 epoch 長度
  • 4. 運行健全性檢查
  • 5. 打印 LightningModule 權重摘要
  • 6. 打印輸入輸出層尺寸

摘要

??本文總結了6種實用的模型調試技巧:1)通過設置斷點逐行檢查代碼;2)使用fast_dev_run參數快速驗證全流程;3)限制批次量縮短訓練周期;4)利用num_sanity_val_steps進行預驗證;5)通過ModelSummary打印模型權重結構;6)設置example_input_array顯示各層輸入輸出尺寸。這些方法可顯著提升調試效率,特別適用于大規模深度學習模型的開發驗證環節,幫助開發者快速定位問題并優化模型結構。

1. 設置斷點

??斷點會停止代碼執行,以便您可以檢查變量等。并允許您的代碼一次執行一行。

def function_to_debug():x = 2# set breakpointbreakpoint()y = x**2

在此示例中,代碼將在執行該行 y = x**2 之前停止。

2. 快速運行所有模型代碼一次

??如果你曾經歷過模型訓練數日后卻在驗證或測試階段崩潰的痛苦,那么這個訓練器參數將成為你的救星。

fast_dev_run(快速開發運行模式)參數會讓訓練器僅執行:
5個批次的訓練 → 驗證 → 測試 → 預測全流程
快速檢測代碼是否存在錯誤:

trainer = Trainer(fast_dev_run=True)

要更改要使用的批次數,請將參數更改為整數。在這里,我們運行每個批次的 7 個批次:

trainer = Trainer(fast_dev_run=7)

啟用fast_dev_run參數時,將自動禁用以下功能組件:

  • 超參優化器(tuner)

  • 模型檢查點回調(checkpoint callbacks)

  • 早停回調(early stopping callbacks)

  • 所有日志記錄器(loggers)

  • 日志類回調(如學習率監控器 LearningRateMonitor / 設備狀態監控器 DeviceStatsMonitor)

3. 縮短 epoch 長度

??在某些場景下,僅使用訓練集/驗證集/測試集/預測數據的子集(或限定批次量)能顯著提升效率。例如:

? 僅抽取20%訓練集

? 僅使用1%驗證集

??在處理ImageNet等大型數據集時,此方法可幫助您:

? 快速完成調試或驗證

? 避免等待完整周期結束

? 大幅縮短反饋周期

# use only 10% of training data and 1% of val data
trainer = Trainer(limit_train_batches=0.1, limit_val_batches=0.01)# use 10 batches of train and 5 batches of val
trainer = Trainer(limit_train_batches=10, limit_val_batches=5)

4. 運行健全性檢查

??Lightning框架在訓練初始階段會預先執行2步驗證,該設計能有效避免:當訓練進入耗時漫長的深水區后,才在驗證環節意外崩潰的風險。

trainer = Trainer(num_sanity_val_steps=2)

5. 打印 LightningModule 權重摘要

??1. 每當調用該函數.fit() 時,Trainer 都會打印 LightningModule 的權重摘要。

trainer.fit(...)

這會生成一個表,如下所示:

  | Name  | Type        | Params | Mode
-------------------------------------------
0 | net   | Sequential  | 132 K  | train
1 | net.0 | Linear      | 131 K  | train
2 | net.1 | BatchNorm1d | 1.0 K  | train
  1. 如需在模型摘要中顯示子模塊,需添加 ModelSummary 回調:
from lightning.pytorch.callbacks import ModelSummary  # 導入模型摘要組件trainer = Trainer(callbacks=[ModelSummary(max_depth=-1)])  # 創建訓練器時配置回調

參數解釋

ModelSummary(max_depth=-1,  # 深度控制:-1=無限遞歸,0=僅頂層,1=展開一級子模塊max_recursion=10  # 可選:防止無限遞歸的保險機制(默認10層)
)

典型輸出示例

| Name        | Type          | Params | In dim       | Out dim      |
|-------------|---------------|--------|--------------|--------------|
| net         | Sequential    | 1.5 M  | [32, 3, 224] | [32, 1000]   |
|  ├─conv1    | Conv2d        | 9.4 K  | [32, 3, 224] | [32, 64,112] |
|  ├─bn1      | BatchNorm2d   | 128    | [32,64,112]  | [32,64,112]  |
|  └─...      | ...           | ...    | ...          | ...          |
  1. 若需在不調用 .fit() 的情況下打印模型摘要,請使用以下方案:
from lightning.pytorch.utilities.model_summary import ModelSummary  # 從工具庫導入摘要類model = LitModel()  # 實例化自定義模型
summary = ModelSummary(model, max_depth=-1)  # 生成深度摘要對象
print(summary)  # 打印結構化模型報告

參數解釋

ModelSummary(model,        # 必需:繼承LightningModule的自定義模型max_depth=-1, # 層級深度:-1=無限遞歸(顯示所有子模塊)max_recursion=10  # 遞歸安全限制(防循環引用崩潰)
)

典型輸出示例

╒═════════════╤══════════════╤═════════╤══════════╤═══════════╕
│ Layer       │ Type         │ Params  │ In dim   │ Out dim   │
╞═════════════╪══════════════╪═════════╪══════════╪═══════════╡
│ encoder     │ Sequential   │ 4.7M    │ [32,256][32,512]  │
│ ├─lstm1     │ LSTM         │ 3.2M    │ [32,256][32,128]  │
│ ├─dropout   │ Dropout      │ 0[32,128][32,128]  │
│ └─...............       │
╘═════════════╧══════════════╧═════════╧══════════╧═══════════╛
Trainable params: 4.7M
Non-trainable params: 0
  1. 要關閉自動匯總,請使用:
trainer = Trainer(enable_model_summary=False)

6. 打印輸入輸出層尺寸

另一個調試工具是通過在 LightningModule 中設置屬性來顯示所有層的中間輸入和輸出大小。example_input_array

class LitModel(LightningModule):def __init__(self, *args, **kwargs):self.example_input_array = torch.Tensor(32, 1, 28, 28)

對于輸入數組,摘要表將包括輸入和輸出層維度:

  | Name  | Type        | Params | Mode  | In sizes  | Out sizes
----------------------------------------------------------------------
0 | net   | Sequential  | 132 K  | train | [10, 256] | [10, 512]
1 | net.0 | Linear      | 131 K  | train | [10, 256] | [10, 512]
2 | net.1 | BatchNorm1d | 1.0 K  | train | [10, 512] | [10, 512]

調用 Trainer.fit() 方法時,該機制可幫助您檢測網絡層組合中的潛在錯誤。

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

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

相關文章

計算機網絡(四)網際層IP

目錄 一、概念 ?編輯 二、網際層和數據鏈路層的關系? 三、IP地址的基礎認識 四、IP地址的分類 五、無分類地址CIDR 六、子網掩碼 七、為什么要分離網絡號和主機號 八、公有IP和私有IP ?編輯 九、IP地址與路由控制 十、IP分片和重組 十一、IPv6 十二、IP協議…

Java--多態--向上轉型--動態綁定機制--斷點調試--向下轉型

目錄 1. 向上轉型 2. 向下轉型 3. java的動態綁定機制: 4. Object類講解 5. 斷點調試 1. 向上轉型 提前:倆個對象(類)存在繼承關系 本質:父類的引用指向了子類的對象 語法:父類 類型 引用名 new…

Python爬蟲實戰:研究urllib 庫相關技術

1. 引言 1.1 研究背景與意義 互聯網每天產生海量數據,如何高效獲取和利用這些數據成為重要研究方向。網頁爬蟲作為自動獲取網絡信息的核心技術,在市場調研、輿情分析、學術研究等領域具有廣泛應用。Python 憑借其簡潔語法和豐富庫支持,成為爬蟲開發的首選語言。 1.2 相關…

【機器學習賦能的智能光子學器件系統研究與應用】

目前在Nature和Science雜志上發表的機器學習與光子學結合的研究主要集中在以下幾個方面: 1.光子器件的逆向設計:通過機器學習,特別是深度學習,可以高效地進行光子器件的逆向設計,這在傳統的多參數優化問題中尤為重要。…

Codeforces Round 1034 (Div. 3)

比賽鏈接如下:https://codeforces.com/contest/2123 A. Blackboard Game Initially, the integers from 00 to n?1 are written on a blackboard. In one round, Alice chooses an integer a on the blackboard and erases it;then Bob chooses an integer b on …

微電網系列之微電網的孤島運行

個人主頁:云納星辰懷自在 座右銘:“所謂堅持,就是覺得還有希望!” 微電網的孤島運行 微電網具有并網和孤島兩種運行模式,由于孤島運行模式下,分布式電源為微電網內部負荷提供頻率和電壓支撐,由…

JsonCpp的核心類及核心函數使用匯總

文章目錄 JsonCpp的核心類及核心函數使用匯總一、前言二、JsonCpp 核心類介紹三、Value 類函數解析1. 值獲取函數(asxxx 系列 )2. 值類型判斷函數(isxxx 系列 )3. 數組操作函數4. 對象操作函數5. 運算符重載6. 迭代器7. JSON 轉化…

Qt寫入excel

1.tableView導出到excel 點擊導出函數按鈕、發送sendMessage信號(信號名稱,對象,數據) void HydroelectricPowerPluginImpl::exportTableViewSelectedRows(QTableView* tableView, QWidget* parent) {if (!tableView || !tableVie…

OSCP - Proving Grounds - DC - 1

主要知識點 drupal 7 RCEfind SUID提權 具體步驟 nmap起手,80端口比較有意思,安裝了 Drupal 7 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-17 14:23 UTC Nmap scan report for 192.168.57.193 Host is up (0.00087s latency). Not shown: 65531 cl…

仿小紅書交流社區(微服務架構)

文章目錄 framework - 平臺基礎設施starter - jacksoncommonexceptionresponseutil starter - content 全局上下文distributed - id - generate - 分布式 IdSnowflake - 基于雪花算法生成 IdSegment - 基于分段式生成 Id OSS - 對象存儲KV - 短文本存儲筆記評論 user - 用戶服務…

大模型開源技術解析 4.5 的系列開源技術解析:從模型矩陣到產業賦能的全棧突破

提示:本篇文章 1300 字,閱讀時間:5分鐘。 前言 6 月 30 日,百度正式開源文心大模型 4.5 系列,這一動作不僅兌現了 2 月發布會上的技術承諾,更以 10 款全維度模型矩陣刷新了國內開源模型的技術邊界。從學術…

[6-02-01].第05節:配置文件 - YAML配置文件語法

SpringBoot學習大綱 一、YAML語法 1.1.概述: 1.YAML是一種數據序列化格式;2.它是以數據為中心3.容易閱讀,容易與腳本語言交互,如下圖所示: 1.2.基本語法 1.key: value:kv之間有空格2.使用縮進表示層級關系3.縮進時…

FPGA學習

一、module : 定義: 是構建數字系統的基本單元,用于封裝電路的結構和行為。它可以表示從簡單的邏輯門到復雜的處理器等任何硬件組件。 1. module 的基本定義 module 模塊名 (端口列表);// 端口聲明input [位寬] 輸入端口1;output [位寬] 輸出端口1;ino…

26-計組-存儲器與Cache機制

一、存儲器與局部性原理 1. 局部性原理 基礎概念: 時間局部性:一個存儲單元被訪問后,短時間內可能再次被訪問(例如循環變量)。空間局部性:一個存儲單元被訪問后,其附近單元可能在短時間內被訪…

I/O 線程 7.3

前言 以下: 概述 1.基礎 2.代碼演示 3.練習 4.分析題 1.基礎 一、線程基礎概念 并發執行原理 通過時間片輪轉實現多任務"并行"效果 實際為CPU快速切換執行不同線程 線程 vs 進程 線程共享進程地址空間,切換開銷更小 進程擁有獨立資源&am…

MySQL JSON數據類型完全指南:從版本演進到企業實踐的深度對話

📊 MySQL JSON數據類型完全指南:從版本演進到企業實踐的深度對話 在當今數據驅動的時代,MySQL作為最受歡迎的關系型數據庫之一,不斷演進以滿足現代應用的需求。JSON數據類型的引入,讓MySQL在保持關系型數據庫優勢的同時…

BI × 餐飲行業 | 以數據應用重塑全鏈路業務增長路徑

在競爭激烈的餐飲行業中,數據已成為企業保持競爭力的關鍵資產。通過深入分析顧客數據,餐飲企業能夠洞察消費者的需求和偏好,從而提供更加精準和個性化的服務。此外,利用數據優化業務管理,降低成本,并提高運…

【學習線路】機器學習線路概述與內容關鍵點說明

文章目錄 零、機器學習的企業價值一、基礎概念1. 機器學習定義2. 學習類型3. 學習范式 二、核心算法與技術1. 監督學習2. 無監督學習3. 模型評估與優化 三、深度學習與神經網絡1. 神經網絡基礎2. 深度學習框架3. 應用場景 四、工具與實踐1. 數據處理2. 模型部署3. 機器學習的生…

Linux 命令:cp

Linux cp 命令詳細教程 cp 是 Linux 系統中最常用的命令之一,用于復制文件或目錄。它可以將源文件/目錄復制到指定的目標位置,支持批量復制、強制覆蓋、保留文件屬性等功能。下面詳細介紹其用法。資料已經分類整理好:https://pan.quark.cn/s…

java分頁插件| MyBatis-Plus分頁 vs PageHelper分頁:全面對比與最佳實踐

MyBatis-Plus分頁 vs PageHelper分頁:全面對比與最佳實踐 一、分頁技術概述 在Java持久層框架中,分頁是高頻使用的功能。主流方案有: MyBatis-Plus分頁:MyBatis增強工具的內置分頁方案PageHelper分頁:獨立的MyBatis…