Keras 3 API 文件 / 回呼 API / BackupAndRestore

備份與還原

[來源]

BackupAndRestore 類別

keras.callbacks.BackupAndRestore(
    backup_dir, save_freq="epoch", double_checkpoint=False, delete_checkpoint=True
)

用於備份和還原訓練狀態的回呼。

BackupAndRestore 回呼旨在從 Model.fit 執行過程中發生的中斷中恢復訓練,方法是在每個 epoch 結束時將訓練狀態備份到臨時檢查點檔案中。每次備份都會覆蓋先前寫入的檢查點檔案,因此在任何給定時間,最多只有一個用於備份/還原目的的檢查點檔案。

如果在完成之前重新開始訓練,訓練狀態(包括 Model 權重和 epoch 號碼)將在新的 Model.fit 執行開始時還原到最近儲存的狀態。在 Model.fit 執行完成時,臨時檢查點檔案將被刪除。

請注意,使用者有責任在中斷後重新啟動作業。此回呼對於容錯目的的備份和還原機制非常重要,並且預期從先前檢查點還原的模型與用於備份的模型相同。如果使用者變更傳遞給編譯或擬合的引數,則為容錯目的儲存的檢查點可能會失效。

範例

>>> class InterruptingCallback(keras.callbacks.Callback):
...   def on_epoch_begin(self, epoch, logs=None):
...     if epoch == 4:
...       raise RuntimeError('Interrupting!')
>>> callback = keras.callbacks.BackupAndRestore(backup_dir="/tmp/backup")
>>> model = keras.models.Sequential([keras.layers.Dense(10)])
>>> model.compile(keras.optimizers.SGD(), loss='mse')
>>> model.build(input_shape=(None, 20))
>>> try:
...   model.fit(np.arange(100).reshape(5, 20), np.zeros(5), epochs=10,
...             batch_size=1, callbacks=[callback, InterruptingCallback()],
...             verbose=0)
... except:
...   pass
>>> history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
...                     epochs=10, batch_size=1, callbacks=[callback],
...                     verbose=0)
>>> # Only 6 more epochs are run, since first training got interrupted at
>>> # zero-indexed epoch 4, second training will continue from 4 to 9.
>>> len(history.history['loss'])
>>> 6

引數

  • backup_dir:字串,儲存還原模型所需資料的目錄路徑。該目錄不能被其他地方重複使用來儲存其他檔案,例如,由另一個訓練執行的 BackupAndRestore 回呼,或由相同訓練執行的另一個回呼(例如 ModelCheckpoint)。
  • save_freq"epoch"、整數或 False。當設定為 "epoch" 時,回呼會在每個 epoch 結束時儲存檢查點。當設定為整數時,回呼會每 save_freq 批次儲存檢查點。僅當使用搶佔式檢查點時(即使用 save_before_preemption=True 時),才將 save_freq=False 設定。
  • double_checkpoint:布林值。如果啟用,BackupAndRestore 回呼將儲存最後 2 個訓練狀態(目前和先前)。如果由於 IO 錯誤(例如,檔案損壞)而無法載入目前狀態,則中斷後會嘗試還原先前的狀態。這種行為會在磁碟上消耗兩倍的空間,但會提高容錯能力。預設值為 False
  • delete_checkpoint:布林值。此 BackupAndRestore 回呼透過儲存檢查點來備份訓練狀態。如果 delete_checkpoint=True,則在訓練完成後將刪除檢查點。如果您希望保留檢查點以供將來使用,請使用 False。預設值為 True