返回Keras中EarlyStopping回调的时期数

时间:2018-04-16 07:58:55

标签: python tensorflow machine-learning neural-network keras

使用EarlyStopping callback时,有没有办法返回在Keras停止训练的时期数?

我可以使用耐心参数获取训练和验证损失的日志并自行计算时代数,但有更直接的方法吗?

3 个答案:

答案 0 :(得分:3)

使用EarlyStopping.stopped_epoch属性:请记住单独变量中的回调,例如callback,并在训练停止后检查callback.stopped_epoch

答案 1 :(得分:1)

您还可以利用History()回调来查找其运行的时期数。例如:

from keras.callbacks import History, EarlyStopping

history = History()
callback = [history, EarlyStopping(monitor='val_loss', patience=5, verbose=1, min_delta=1e-4)]

history = model.fit_generator(...., callbacks=callbacks)
number_of_epochs_it_ran = len(history.history['loss'])

答案 2 :(得分:1)

this comment中建议从时期总数中减去patience值可能无法正常工作。例如,如果您设置了epochs=100patience=20,如果在第90时发现了最佳的准确性/损失值,则训练将在第100时停止。因此,采用这种方法时,您会得到一个错误的数字( 100-20 = 80)。

此外,如this comment中所述,使用EarlyStopping.stopped_epoch仅在训练停止时为您提供时间,而在保存最佳权重时则没有时间。当您设置save_best_weights=True或依靠ModelCheckpoint保存最佳模型之前停止训练时,这特别有用。

因此,我的解决方案是获取具有最佳值的模型历史记录数组的索引。假设所使用的度量标准是验证准确性(取决于numpy),下面是一些代码:

import numpy as np

model.fit(...)
hist = model.history.history['val_acc']
n_epochs_best = np.argmax(hist)