已解:匯出特定時期的 keras 模型

最後更新: 09/25/2023

Keras是一個用 Python 寫的開源神經網路函式庫。它可以運行在 TensorFlow、Microsoft Cognitive Toolkit、R、Theano 或 PlaidML 等框架之上。 Keras 的一個顯著優勢是允許開發者匯出特定訓練輪數的模型,這對於模型調優和效能評估非常有用。

問題

在訓練機器學習模型時,我們通常會監控某些驗證資料的損失或度量函數的效能。 不同的時期可能會導致不同的模型性能。 有時,最好的結果是在與訓練過程結束並不對應的時期實現的。 在這種情況下,如果我們可以在特定時期保存/導出 keras 模型,就會派上用場。

解決方案

這個問題的解決方案在於 Keras 回調。 回調是一個物件(實現特定方法的類別實例),它在呼叫中傳遞給模型以進行擬合,並由模型在訓練期間的各個點呼叫。 它可以存取有關模型狀態及其性能的所有可用數據。

自訂回調函數允許我們在訓練的各個階段指定操作,例如在紀元的開始或結束時、單一批次之前或之後等。其中一個操作可能是在特定紀元保存模型。

代碼的逐步解釋

首先,我們定義一個自訂回調來在特定時期保存模型。

class CustomSaver(keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs={}):
        if epoch == 9:  # or save after some epoch, each k-th epoch etc.
            self.model.save("model_{}.hd5".format(epoch))

接下來,我們將此回調加入到模型擬合過程中。

model = ...  # create model
model.compile(optimizer='...', loss='...')  # compile model

saver = CustomSaver()
model.fit(..., callbacks=[saver]) # put your X_train, Y_train ...

在上面的程式碼中,我們建立 CustomSaver 類別的一個實例,然後將其作為回調列表的一部分傳遞給模型的 fit 方法。

透過修改「on_epoch_end」方法中的「if」條件,我們可以在每個「k」紀元之後或每當滿足特定條件時保存回調。

Keras 函式庫及其功能

Keras 時尚、使用者友善的設計簡化了深度學習模型的創建和修改。 它配備了多種工具,例如用於建立模型的 Sequential 和 Model 類別、神經網路的各個層(卷積、池化、密集等)以及用於監控訓練的回調。

回調最有用的方面之一是儘早停止訓練,或根據驗證性能保存最佳模型。 這是一個經常被問到的功能,Keras 已經包含了它們的內建回調,稱為 ModelCheckpoint 和 EarlyStopping。

就是這樣! 現在將這些知識應用到您的場景中,並將 Keras 模型保存在它提供最佳效能的時期。 快樂模特兒訓練!

相關文章: