使用EarlyStopping
callback时,有没有办法返回在Keras停止训练的时期数?
我可以使用耐心参数获取训练和验证损失的日志并自行计算时代数,但有更直接的方法吗?
答案 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=100
和patience=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)