簡體   English   中英

在特定時期保存 Keras 模型

[英]Save Keras model at specific epochs

我正在使用 Keras 對我的數據集進行一些訓練,每次保持運行以定位獲得最佳結果所需的 epoch 數是非常耗時的。 我嘗試使用回調來獲得最佳模型,但它不起作用並且通常過早停止。 此外,保存每 N 個時期對我來說不是一個選擇。

我想做的是在完成某些特定時期后保存模型。 比如說,在epoch = 150結束后,它會被保存為model.save(model_1.h5)並且在epoch = 152 ,它會被保存為model.save(model_2.h5)等等......特定的時代。

有沒有辦法在 Keras 中實現這一點? 我已經搜索了一種方法,但到目前為止還沒有運氣。

感謝您的任何幫助/建議。

編輯
在大多數情況下,使用@Toan Tran 在他的回答中建議的名稱格式就足夠了。

但是如果你需要一些復雜的邏輯,你可以使用回調,例如

import keras

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

on_epoch_end在每個 epoch 結束時調用; epoch是多個紀元,后一個參數是一個日志(您可以在文檔中閱讀其他回調方法)。 將邏輯放入此方法中(在示例中它盡可能簡單)。

創建 saver 對象並將其放入fit方法:

import keras
import numpy as np

inp = keras.layers.Input(shape=(10,))
dense = keras.layers.Dense(10, activation='relu')(inp)
out = keras.layers.Dense(1, activation='sigmoid')(dense)
model = keras.models.Model(inp, out)
model.compile(optimizer="adam", loss="binary_crossentropy",)

# Just a noise data for fast working example
X = np.random.normal(0, 1, (1000, 10))
y = np.random.randint(0, 2, 1000)

# create and use callback:
saver = CustomSaver()
model.fit(X, y, callbacks=[saver], epochs=5)

bash

!ls
Out:
model_2.hd5                     

所以,它有效。

checkpoint = keras.callbacks.ModelCheckpoint('model{epoch:08d}.h5', period=5) 
model.fit(X_train, Y_train, callbacks=[checkpoint])

你試過檢查點嗎? period=5表示模型在 5 個 epoch 后保存

更多細節在這里

希望這有幫助:)

好吧,我還不能對帖子發表評論。 所以,我要補充@Toan Tran的回答。 使用最新版本的 Keras,不推薦使用參數period 相反,我們可以使用save_freq

在以下示例中,模型在每個 epoch 之后保存。

checkpoint = keras.callbacks.ModelCheckpoint(model_save_path+'/checkpoint_{epoch:02d}', save_freq='epoch')
H=model.fit(x=x_train, y=y_train,epochs=epoch_no,verbose=2, callbacks=[checkpoint])

您可以從keras 文檔中找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM