我正在使用Keras为我的项目训练神经网络.Keras提供了早期停止的功能.我是否应该知道应该观察哪些参数以避免我的神经网络过度拟合使用早期停止?
我正在尝试编写一些逻辑来选择在 Keras 中运行神经网络的最佳纪元。我的代码保存一定数量的历元的训练损失和测试损失,然后根据某种逻辑选择最合适的历元。代码如下所示:
ini_epochs = 100
df_train_loss = DataFrame(data=history.history['loss'], columns=['Train_loss']);
df_test_loss = DataFrame(data=history.history['val_loss'], columns=['Test_loss']);
df_loss = concat([df_train_loss,df_test_loss], axis=1)
Min_loss = max(df_loss['Test_loss'])
for i in range(ini_epochs):
Test_loss = df_loss['Test_loss'][i];
Train_loss = df_loss['Train_loss'][i];
if Test_loss > Train_loss and Test_loss < Min_loss:
Min_loss = Test_loss;
Run Code Online (Sandbox Code Playgroud)
逻辑背后的想法是这样的;为了得到最好的模型,选择的epoch应该选择损失值最低的模型,但它必须高于训练损失值以避免过拟合。
总体来说,这种epoch选择方法是可以工作的。但是,如果测试损失值从一开始就低于训练损失,则此方法会选择零纪元(见下文)。

现在我可以添加另一个if语句来评估测试和训练损失之间的差异是正还是负,然后为每种情况编写逻辑,但是如果差异开始为正,然后最终为负,会发生什么。我很困惑,无法编写有效的代码。
所以,我的问题是:
1)您能否向我展示您将编写哪些代码来解释图中显示的情况(以及测试和训练损失曲线交叉的情况)。我想说的策略是采用差异最小的值。
2)我很可能以错误的方式处理这件事。我知道 Keras 有回调功能,但我不喜欢使用该save_best_only功能的想法,因为它可以保存过度拟合的模型。任何关于更有效的纪元选择方法的建议都会很棒。