Python 如何理解Keras模型拟合中的损耗值

Python 如何理解Keras模型拟合中的损耗值,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我是Keras新手,对如何理解我的模型结果有一些疑问。这是我的结果:(为了方便起见,我只在这里粘贴每个历元后的loss acc val_loss val_acc) 培训4160个样本,验证1040个样本,如下所示: Epoch 1/20 4160/4160 - loss: 3.3455 - acc: 0.1560 - val_loss: 1.6047 - val_acc: 0.4721 Epoch 2/20 4160/4160 - loss: 1.7639 - acc: 0.4274 - va

我是Keras新手,对如何理解我的模型结果有一些疑问。这是我的结果:(为了方便起见,我只在这里粘贴每个历元后的loss acc val_loss val_acc)

培训4160个样本,验证1040个样本,如下所示:

Epoch 1/20
4160/4160 - loss: 3.3455 - acc: 0.1560 - val_loss: 1.6047 - val_acc: 0.4721

Epoch 2/20
4160/4160 - loss: 1.7639 - acc: 0.4274 - val_loss: 0.7060 - val_acc: 0.8019

Epoch 3/20
4160/4160 - loss: 1.0887 - acc: 0.5978 - val_loss: 0.3707 - val_acc: 0.9087

Epoch 4/20
4160/4160 - loss: 0.7736 - acc: 0.7067 - val_loss: 0.2619 - val_acc: 0.9442

Epoch 5/20
4160/4160 - loss: 0.5784 - acc: 0.7690 - val_loss: 0.2058 - val_acc: 0.9433

Epoch 6/20
4160/4160 - loss: 0.5000 - acc: 0.8065 - val_loss: 0.1557 - val_acc: 0.9750

Epoch 7/20
4160/4160 - loss: 0.4179 - acc: 0.8296 - val_loss: 0.1523 - val_acc: 0.9606

Epoch 8/20
4160/4160 - loss: 0.3758 - acc: 0.8495 - val_loss: 0.1063 - val_acc: 0.9712

Epoch 9/20
4160/4160 - loss: 0.3202 - acc: 0.8740 - val_loss: 0.1019 - val_acc: 0.9798

Epoch 10/20
4160/4160 - loss: 0.3028 - acc: 0.8788 - val_loss: 0.1074 - val_acc: 0.9644

Epoch 11/20
4160/4160 - loss: 0.2696 - acc: 0.8923 - val_loss: 0.0581 - val_acc: 0.9856

Epoch 12/20
4160/4160 - loss: 0.2738 - acc: 0.8894 - val_loss: 0.0713 - val_acc: 0.9837

Epoch 13/20
4160/4160 - loss: 0.2609 - acc: 0.8913 - val_loss: 0.0679 - val_acc: 0.9740

Epoch 14/20
4160/4160 - loss: 0.2556 - acc: 0.9022 - val_loss: 0.0599 - val_acc: 0.9769

Epoch 15/20
4160/4160 - loss: 0.2384 - acc: 0.9053 - val_loss: 0.0560 - val_acc: 0.9846

Epoch 16/20
4160/4160 - loss: 0.2305 - acc: 0.9079 - val_loss: 0.0502 - val_acc: 0.9865

Epoch 17/20
4160/4160 - loss: 0.2145 - acc: 0.9185 - val_loss: 0.0461 - val_acc: 0.9913

Epoch 18/20
4160/4160 - loss: 0.2046 - acc: 0.9183 - val_loss: 0.0524 - val_acc: 0.9750

Epoch 19/20
4160/4160 - loss: 0.2055 - acc: 0.9120 - val_loss: 0.0440 - val_acc: 0.9885

Epoch 20/20
4160/4160 - loss: 0.1890 - acc: 0.9236 - val_loss: 0.0501 - val_acc: 0.9827
以下是我的理解:

  • 两种损耗(损耗和val_损耗)都在减少,牵引acc(acc和val_acc)也在增加。因此,这表明建模得到了很好的训练

  • val_acc是衡量模型预测结果好坏的指标。所以对于我的例子来说,看起来模型在6个时代之后训练得相当好,剩下的训练是不必要的

  • 我的问题是:

  • acc(训练集上的acc)总是比val_acc小,实际上小得多。这正常吗?为什么会发生这种情况?在我看来,acc通常应该与val_acc相似,而不是更好

  • 20个世纪后,acc仍在增加。那么,我应该使用更多的历元并在acc停止增加时停止吗?或者我应该停在val_acc停止增加的地方,不管acc的趋势如何

  • 对我的结果还有其他想法吗


  • 谢谢

    回答您的问题:

  • 如官方报告所述
  • 培训损失是每批培训数据损失的平均值。因为您的模型会随着时间的推移而变化,所以一个历元的第一批损失通常高于最后一批。另一方面,在历元结束时,使用模型计算历元的测试损耗,从而降低损耗

  • 当val_acc停止增加时,应停止培训,否则您的模型可能会溢出。您可以使用earlystopping回调停止训练

  • 你的模型似乎取得了很好的效果。继续努力

  • 什么是
    损失
    价值损失
  • 在深度学习中,损失是神经网络试图最小化的值:它是基本事实和预测之间的距离。为了最小化该距离,神经网络通过调整权重和偏差进行学习,以减少损失

    例如,在回归任务中,您有一个连续的目标,例如身高。你想要最小化的是你的预测和实际高度之间的差异。您可以使用
    平均绝对误差
    作为损失,以便神经网络知道这是它需要最小化的

    分类中有点复杂,但非常相似。预测类基于概率。因此,损失也基于概率。在分类中,神经网络最小化将低概率分配给实际类别的可能性。损失通常是分类的

    loss
    valu loss
    不同,因为前者适用于列车组,后者适用于测试组。因此,后者很好地说明了模型如何处理看不见的数据。您可以使用
    validation\u data=[x\u test,y\u test]
    validation\u split=0.2
    获得验证集

    最好依靠
    val_loss
    来防止。过度拟合是指模型与训练数据的拟合过于紧密,而
    损失
    持续减少,而
    valu损失
    过时或增加

    在Keras中,当
    val_损失
    停止减少时,您可以使用
    earlystoping
    停止训练。阅读

    请在此处阅读有关深度学习损失的更多信息:

  • 什么是
    acc
    val\u acc
  • 准确度是一种度量标准,仅用于分类。对于有连续目标的任务来说,这毫无意义。它给出了正确分类的实例的百分比


    同样,
    acc
    在培训数据上,而
    val_acc
    在验证数据上。最好依靠
    val_acc
    公平地表示模型性能,因为一个好的神经网络最终将以100%拟合训练数据,但在看不见的数据上表现不佳。

    @Rocco请不要在评论中提出此类后续问题(如有必要,您可以随时提出新问题)。如果答案解决了你的问题,请接受它-这样我就能理解什么是损失,但这个数字实际上代表什么。这是一个百分比吗?例如,损失0.5,这实际上意味着什么?损失与0.5这个数字有什么关系?