在keras中保存最佳模型

dJO*_*MMY 19 neural-network deep-learning 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)
Run Code Online (Sandbox Code Playgroud)

但是最近我想得到保存最好的训练模型,因为我训练的数据在"高val_loss vs epochs"图中给出了很多高峰,我想从模型中使用最好的一个.

是否有任何方法或功能可以帮助解决这个问题?

jor*_*mit 30

EarlyStoppingrestore_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
)
Run Code Online (Sandbox Code Playgroud)

然后只需调用model.fit()callbacks=[early_stopping_monitor]像你已经做的。

  • 这是正确的答案。其他答案获得更多票数的原因可能是由于 [Keras 2.2.3](https://github.com/keras-team/keras/releases/tag/2.2.3) 中引入了 `restore_best_weights` ),已于 2018 年 10 月发布,即在[此答案](/sf/answers/3380020241/)之后发布。 (2认同)

Shr*_*rni 29

您可以从Keras文档中获得EarlyStoppingModelCheckpoint.

您应该save_best_only=True在ModelCheckpoint中设置.如果需要任何其他调整,则是微不足道的.

只是为了帮助你更多,你可以在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)
Run Code Online (Sandbox Code Playgroud)

  • 你能在这里附上例子吗?如果链接断开,答案将变为useles (3认同)

Viv*_*vek 7

我猜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)
Run Code Online (Sandbox Code Playgroud)