[英]Saving best model in keras
我在 keras 中訓練模型時使用以下代碼
from keras.callbacks import EarlyStopping
model = Sequential()
model.add(Dense(100, activation='relu', input_shape = input_shape))
model.add(Dense(1))
model_2.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
model.fit(X, y, epochs=15, validation_split=0.4, callbacks=[early_stopping_monitor], verbose=False)
model.predict(X_test)
但最近我想保存最好的訓練模型,因為我正在訓練的數據在“高 val_loss vs epochs”圖中給出了很多峰值,我想使用模型中最好的一個。
有什么方法或功能可以幫助解決這個問題嗎?
EarlyStopping和ModelCheckpoint是您從 Keras 文檔中需要的。
您應該在 ModelCheckpoint 中設置save_best_only=True
。 如果需要任何其他調整,都是微不足道的。
為了幫助你更多,你可以在 Kaggle 上看到一個用法。
如果上面的 Kaggle 示例鏈接不可用,請在此處添加代碼:
model = getModel()
model.summary()
batch_size = 32
earlyStopping = EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='min')
mcp_save = ModelCheckpoint('.mdl_wts.hdf5', save_best_only=True, monitor='val_loss', mode='min')
reduce_lr_loss = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=7, verbose=1, epsilon=1e-4, mode='min')
model.fit(Xtr_more, Ytr_more, batch_size=batch_size, epochs=50, verbose=0, callbacks=[earlyStopping, mcp_save, reduce_lr_loss], validation_split=0.25)
EarlyStopping
的restore_best_weights
參數可以解決問題:
restore_best_weights:是否從監測數量的最佳值的epoch恢復模型權重。 如果為 False,則使用在訓練的最后一步獲得的模型權重。
所以不確定你的early_stopping_monitor
是如何定義的,但是使用所有默認設置並看到你已經導入了EarlyStopping
你可以這樣做:
early_stopping_monitor = EarlyStopping(
monitor='val_loss',
min_delta=0,
patience=0,
verbose=0,
mode='auto',
baseline=None,
restore_best_weights=True
)
然后就像你已經做的那樣,用callbacks=[early_stopping_monitor]
調用model.fit()
。
我猜model_2.compile
是一個錯字。 如果您想將最佳模型 wrt 保存到 val_losses,這應該會有所幫助 -
checkpoint = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', verbose=1, monitor='val_loss',save_best_only=True, mode='auto')
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
model.fit(X, y, epochs=15, validation_split=0.4, callbacks=[checkpoint], verbose=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.