【问题标题】:How to get train and dev error in Keras neural net?如何在 Keras 神经网络中获得训练和开发错误?
【发布时间】:2019-09-27 02:06:50
【问题描述】:

为了了解我的模型是过拟合还是欠拟合,我应该如何获取这些值? 比如train_error= 0.1dev_error=0.25,模型过拟合是可以理解的。但我不知道我的模型提供的哪些结果表明了上述错误。 损失值是表示这个度量还是(1-accuracy)一个?

这是我的模型训练结果的一部分:

Epoch 152/250
100253/100253 [==============================] - 12s 118us/step - loss: 
0.5306 - acc: 0.8568 - val_loss: 1.1438 - val_acc: 0.7550

【问题讨论】:

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


    【解决方案1】:
    1. errorloss 是同义词

    2. Keras 表示训练损失(分别为准确率)为loss (acc);验证损失和准确率分别表示为val_lossval_acc

    3. train_error= 0.1dev_error=0.25,或者loss: 0.5306val_loss: 1.1438 和这里一样,not 是否表示过拟合;这只是泛化差距,即训练集和验证集之间的预期性能差距。引用最近的blog post by Google AI

      理解泛化的一个重要概念是泛化差距,即模型在训练数据上的性能与其在从同一分布中提取的不可见数据上的性能之间的差异。

    过度拟合的特征是当您的验证损失开始增加,而您的训练损失继续减少时,即:

    注意上图中曲线之间的间隙(双关语)(改编自Wikipedia entry on overfitting)。

    根据上下文,人们可能更喜欢监控 metric 而不是下面评论中正确指出的损失,但这是另一个讨论 - 希望你能在这里得到这个想法......

    【讨论】:

    • 我认为有必要提到有时,根据您的应用程序,您可能希望实际使用指标(而不是损失)来确定它将从哪里开始过度拟合。它们并不总是以相同的方式发展,并且出于某些目的,指标比损失更重要。
    • @DanielMöller 同意并更新答案;我很高兴你这么说,因为我最近偶然发现了一位高级 SO 受访者对 ML 问题的评论,声称(错误地,恕我直言)这种方法是错误的......
    • @desertnaut 是的,我理解错误的概念。有这么大的损失值不是很不正常吗?这些模棱两可的值让我怀疑我是否一开始就正确理解了错误的概念。
    • @DanielMöller 我想监控我的模型的精度和召回值,但我认为没有用于这些目的的内置方法。也许我必须为此实现一个自定义指标!
    • @raminkarimian 我们通常无法直观地理解交叉熵损失,这就是我们使用准确率的原因,这里看起来不错
    猜你喜欢
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2019-12-17
    • 2017-11-27
    • 2011-04-07
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多