Callbacks in Lightning

我們時(shí)常想使用一些功能, 它們可以被歸類但又分散在項(xiàng)目的各個(gè)位置, 一般它們與核心代碼無關(guān). 例如, 我們想寫追溯程序的運(yùn)行狀態(tài), 一般我們會(huì)在程序運(yùn)行的各個(gè)節(jié)點(diǎn)寫下諸如 print(‘training starts....’)的代碼. 這些代碼與主程序無關(guān),如果全部寫在主程序里面會(huì)顯得比較冗雜, 它們實(shí)現(xiàn)同一個(gè)功能但又分散在程序的各個(gè)位置,這時(shí)就可以用到callbacks了.

原則

首先明確callbacks的使用原則.

  • 獨(dú)立. callback需要保持獨(dú)立的功能, callbacks 之間也不要相互調(diào)用對(duì)方的方法.
  • 無順序. 不建議callbacks之間相互依賴, callbacks之間不要有執(zhí)行的先后順序.
  • 不要調(diào)用上一級(jí)的方法. 例如 on_validation_end() .

位置

要使用callbacks, 首先要明確這些鉤子的位置. 官網(wǎng)給了一個(gè)偽代碼來幫我們快速找到它們的位置.

This is the pseudocode to describe the structure of `fit_loop` and `val_loop` only

使用

from lightning.pytorch.callbacks import Callback

# 通過繼承創(chuàng)建一個(gè)自己的Hook
class MyPrintingCallback(Callback):
    def on_train_start(self, trainer, pl_module):
        print("Training is starting")

    def on_train_end(self, trainer, pl_module):
        print("Training is ending")

# 注冊(cè)自定的Hook
trainer = Trainer(callbacks=[MyPrintingCallback()])

因此到位置的時(shí)候, 程序會(huì)執(zhí)行注冊(cè)鉤子里的代碼:

# pseudocode
on_train_start() # "Training is starting"
train()
on_train_end() # "Training is ending"

內(nèi)置callbacks

有一些內(nèi)置callbacks實(shí)現(xiàn)了一些用的功能, 以下顯示了一些我覺得有用的:

Ref

https://lightning.ai/docs/pytorch/stable/extensions/callbacks.html
https://lightning.ai/docs/pytorch/latest/common/lightning_module.html#hooks
https://stephencowchau.medium.com/pytorch-lightning-hooks-and-callbacks-my-limited-understanding-d8e0a56dcf2b

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容