Machine learning LSTM验证损失越大,验证精度越高(Python:Keras)
在培训我的LSTM(使用Python中的Keras库)时,验证损失不断增加,尽管它最终获得了更高的验证精度。这就引出了两个问题:Machine learning LSTM验证损失越大,验证精度越高(Python:Keras),machine-learning,keras,lstm,loss,Machine Learning,Keras,Lstm,Loss,在培训我的LSTM(使用Python中的Keras库)时,验证损失不断增加,尽管它最终获得了更高的验证精度。这就引出了两个问题: 它如何/为什么在(显著)较高的验证损失下获得(显著)较高的验证精度 验证损失增加是否有问题?(因为无论哪种方式,最终都会获得良好的验证精度) 这是适用于我的LSTM的历史记录示例: 将历元0与历元430进行比较时可见: 1.1 val损失时的val准确率为52%,而1.8 val损失时的val准确率为61% 对于损失函数,我使用tf.keras.loss.Categ
- 精度可能会更高,这意味着您的模型能够学习除异常值之外的数据集的其余部分
- 验证集有太多导致损失值振荡的异常值
- 精度可能会更高,这意味着您的模型能够学习除异常值之外的数据集的其余部分
- 验证集有太多导致损失值振荡的异常值
为了得出是否过度拟合的结论,您应该检查验证集是否存在异常值。感谢您的输入,我将首先查看验证集中的异常值。我认为它可能确实在异常值上做得更糟(但导致相同的预测/分类),同时在其接近预测正确的其余数据上改进acc。至于高学习率,降低学习率会导致验证准确率显著降低。将学习率设置为50-60%似乎是我的模型获得最佳验证精度的最佳选择。顺便说一句,我确实有用于调节的辍学层,但即使辍学值很高,“问题”仍然存在。关于如何识别异常值,你有什么建议吗?例如,仅确定正确类别的预测概率最低的样本?(所以损失最高的是哪个)就你的情况而言,学习率似乎是个问题。你们超过了上下波动的最小值。你需要降低它或使用另一个优化器,或者如果你坚持使用SGD,你需要按时代调整你的LR。通过调整LR,您可以在不超调的情况下获得更好的结果。您也可以尝试L2正则化。关于第二个问题,您可以使用基于集群的异常检测(我假设您正在处理时间序列),我将研究基于集群的异常检测!至于LR,有没有办法衡量我的LR是否(仍然)过高?例如,您提到过,因为它波动很大,但为了优化结果,验证精度应该波动多少,是否有具体限制?(或者使用另一种正式方法来确定我的LR是否过高)编辑:我添加了另一个示例运行,其中验证精度波动不大,但在较高的验证损失下仍然会增加。如果没有数据集的详细信息,很难判断,但您可以使用ReduceLROnPlateu回调,LR调度程序。如果LR调整没有帮助,我会更改优化器并查看差异。感谢您的输入,我将首先查看验证集中的异常值。我认为它可能确实在异常值上做得更糟(但导致相同的预测/分类),同时在其接近预测正确的其余数据上改进acc。至于高学习率,降低学习率会导致验证准确率显著降低。将学习率设置为50-60%似乎是我的模型获得最佳验证精度的最佳选择。顺便说一句,我确实有用于调节的辍学层,但即使辍学值很高,“问题”仍然存在。关于如何识别异常值,你有什么建议吗?例如,仅确定正确类别的预测概率最低的样本?(所以损失最高的是哪个)就你的情况而言,学习率似乎是个问题。你们超过了上下波动的最小值。你需要降低它或使用另一个优化器,或者如果你坚持使用SGD,你需要按时代调整你的LR。通过调整LR,您可以在不超调的情况下获得更好的结果。您也可以尝试L2正则化。关于您的第二个问题,您可以使用基于集群的异常检测(我假设是