在keras中保存最佳模型

时间:2018-01-16 15:51:43

标签: 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)

但是最近我希望得到最好的训练模型,因为我正在训练的数据在“高val_loss vs epochs”图中给出了很多高峰,我想从模型中使用最好的一个。

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

3 个答案:

答案 0 :(得分:17)

EarlyStoppingModelCheckpoint是您需要的Keras文档。

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

为了帮助您,您可以看到使用情况here on 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)

答案 1 :(得分:3)

我猜model_2.compile是一个错字。 如果您想将最佳模型w.r.t保存到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)

答案 2 :(得分:0)

EarlyStoppingrestore_best_weights参数可以解决问题:

  

restore_best_weights :是否从纪元恢复具有最佳监视数量值的模型权重。如果为False,则使用训练的最后一步获得的模型权重。