![](/img/trans.png)
[英]Is it possible in TF/Keras to save the best model AFTER X epochs?
[英]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.