本節指導如何利用Lightning進行可視化和監控模型
為何需要跟蹤參數
在模型開發中,我們跟蹤感興趣的值,例如validation_loss,以可視化模型的學習過程。模型開發就像駕駛一輛沒有窗戶的汽車,圖表和日志提供了窗口,讓我們知道該把車開到哪里。有了Lightning,幾乎可以可視化任何你能想到的東西:數值、文本、圖像、音頻…
跟蹤指標
度量可視化是理解模型在整個模型開發過程中如何運行的最基本但最強大的方法。要跟蹤指標,只需使用LightningModule
中的self.log
方法
class LitModel(pl.LightningModule):def training_step(self, batch, batch_idx):value = ...self.log("some_value", value)
要一次記錄多個指標,使用self.log_dict
values = {"loss": loss, "acc": acc, "metric_n": metric_n} # add more items if needed
self.log_dict(values)
要在命令行進度條中查看指標,需將prog_bar參數設置為True。
self.log(..., prog_bar=True)
命令行視圖
如果要在瀏覽器中查看指標,默認情況下,Lightning使用Tensorboard和一個簡單的CSV日志記錄器。
# 默認情況下,每個訓練器已經啟用了tensorboard(如果依賴項可用)
trainer = Trainer()
使用如下命令進行顯示
tensorboard --logdir=lightning_logs/
如果您使用的是notebook環境,如colab或kaggle或jupyter,使用如下命令啟動Tensorboard
%reload_ext tensorboard
%tensorboard --logdir=lightning_logs/
累計指標
當在training_step
中調用self.log
時,它會生成一個時間序列,顯示指標隨時間的變化情況。
然而,對于驗證和測試集,我們通常對繪制每批數據的指標不感興趣。相反,我們希望在整個數據分割中計算匯總統計(例如平均值、最小值或最大值)。
當您在validation_step和test_step中調用self.log時,Lightning會自動累積指標并在整個分割(epoch)完成后取平均值。
def validation_step(self, batch, batch_idx):value = batch_idx + 1self.log("average_value", value)
如果不想取平均值,也可以通過傳遞reduce_fx參數從{min,max,sum}中進行選擇。
# default function
self.log(..., reduce_fx="mean")
對于其他reductions,我們建議記錄一個torchmetrics.Metric
實例取代。
配置保存目錄
默認情況下,任何記錄的內容都保存到當前工作目錄中。要使用不同的目錄,請在Trainer中設置default_root_dir參數。
Trainer(default_root_dir="/your/custom/path")