返回Keras中EarlyStopping回调的时期数

Ale*_*ara 6 python machine-learning neural-network keras tensorflow

有什么方法可以返回使用EarlyStopping回调时在Keras中停止训练的时期数?

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

Vit*_*ile 7

patience从历元总数中减去该值(如本评论中所建议的)在某些情况下可能不起作用。例如,如果您设置epochs=100patience=20,如果在第 90 轮找到最佳准确率/损失值,则训练将在第 100 轮停止。因此,使用这种方法,您会得到错误的数字 (100-20 = 80)。

此外,正如本评论中所述,使用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)
Run Code Online (Sandbox Code Playgroud)


Max*_*xim 5

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

  • 请注意,如果您在 EarlyStopping 上设置 `restore_best_weights=True`,stopped_epoch 将不会返回与找到的 best_weights 对应的 epoch 数,而只返回提前停止停止训练的 epoch 数。 (5认同)