【问题标题】:What am I trying to do here? train acc: 100%, test acc: 80% does this mean overfitting?我想在这里做什么? train acc: 100%, test acc: 80% 这是否意味着过拟合?
【发布时间】:2019-08-05 01:42:31
【问题描述】:
classifier.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
classifier.fit(X_train, y_train, epochs=50, batch_size=100)

Epoch 1/50
27455/27455 [==============================] - 3s 101us/step - loss: 2.9622 - acc: 0.5374

我知道我在第一行编译我的模型并在第二行进行拟合。我知道什么是优化器。我对metrics=['accuracy'] 的含义以及编译模型时acc: XXX 的确切含义很感兴趣。 此外,当我训练我的模型(100%)时,我得到了acc : 1.000,但是当我测试我的模型时,我得到了 80% 的准确率。我的模型是否过拟合?

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    从问题的第一部分开始 -

    Keras 将Metric 定义为“用于判断模型性能的函数”。在这种情况下,您使用准确性作为判断模型好坏的函数。 (这是常态)

    对于您问题的第二部分 - acc 是您的模型在该时期的准确度。
    这可以而且会根据模型中定义的指标而改变。

    根据您告诉我们的内容,您最终可能得到了一个过拟合模型,但有简单的solutions

    【讨论】:

      【解决方案2】:

      好的,让我们从顶部开始,

      首先,metrics = ['accuracy'],模型可以在多个参数上进行评估,准确率是指标之一,其他可以是binary_accuracycategorical_accuracysparse_categorical_accuracytop_k_categorical_accuracysparse_top_k_categorical_accuracy,这些只是内置的,您甚至可以创建自定义指标,要更详细地了解指标,您需要对神经网络中的loss有一个清晰的了解,您可能知道损失函数必须是可微的才能能够要进行反向传播,在 metrics 的情况下没有必要这样做,指标纯粹用于模型评估,因此甚至可以是不可微分的函数,在 Keras 中甚至在其文档中也提到过

      度量函数类似于损失函数,只是在训练模型时不使用评估度量的结果。您可以将任何损失函数用作度量函数。

      您可以自行定义一个不可微分的准确度,但可以根据您的模型需要创建一个目标函数。

      TLDR;指标只是损失函数,不用于反向传播,但用于模型评估。

      现在, acc:xxx 可能只是它甚至还没有完成一个小批量传播,因此还不能给出准确度分数,我没有太注意它,但它通常会在那里停留几秒钟,因此是一种推测。

      最后 模型性能在退出训练时降低 20%,是的,这可能是过度拟合的情况,但没有人可以在不查看数据集的情况下确定,但很可能是的,它过度拟合,您可能需要查看其表现不佳的数据以了解原因。

      如果有什么不清楚或没有意义的地方,请随时发表评论。

      【讨论】:

      • 我不同意这一点:“but most probably yes, it is overfitting, and you may need to look at the data it is performing bad on to know the cause.。阅读我的回答。
      • @Vlad 我同意您的回答中的部分,即它不一定会过拟合,因此我在开头没有查看数据集就无法确定,但您继续说几乎可以肯定不会过度拟合,我认为这有点不诚实,主要是因为 OP 没有提到任何关于数据集或可训练参数的数量,而且 keras 并不总是意味着深度网络,人们使用 keras 的时间只有 5-6层,而您的答案是在极端深度学习中,我无法评论您链接的论文,但我也会浏览它们,它们看起来很有趣:)
      • 我说过`如果你的模型配备了比训练样本数量更有效的参数,它几乎肯定不会过拟合`。我并没有说每种情况都是如此(顺便说一句,我看到的大多数初学者教程都有几十万个参数 > 60000 个 MNIST 样本)。如果你能告诉我它确实过拟合的情况,比如简单的 MLP 模型,它有 1-3 个隐藏层,用于 MNIST/CIFAR,有几十万个参数,我会重新考虑我的答案。
      • 我的答案不是针对极端深度学习,而是针对任何深度学习。我引用了非常大的模型来说明它们不会过拟合,即使它与经典的统计学习理论相矛盾。
      • MNIST 数据集甚至可以在将图像展平并将其通过具有甚至 8 个特征的瓶颈层的自动编码器之后工作,也就是说我通过了第一篇论文并且很感兴趣,但我并不完全相信但肯定很感兴趣,如果你还记得,当你的研究发表时回来评论一下,我很期待,但到目前为止我还不相信,祝你好运。
      【解决方案3】:

      所以metrics=['accuracy']的含义实际上取决于你使用什么损失函数。你可以从line 375 及以下看到 keras 是如何处理这个问题的。由于您使用的是 categorical_crossentropy,因此您的案例遵循 elif 中的逻辑(第 386 行)。因此,您的度量函数设置为

      metric_fn = metrics_module.sparse_categorical_accuracy
      

      有关 sparse_categorical_accuracy 背后逻辑的描述,请参阅this post,它应该清楚您的情况下“准确性”的含义。它基本上只是计算你的预测(概率最大的类)有多少与真实类相同。

      训练与验证的准确性可能会出现过度拟合的迹象。为了测试这个图,训练准确度和验证准确度相互对比,看看验证准确度从什么时候开始下降。关注this 以获得关于如何绘制准确率和损失等的良好描述,以测试过度拟合。

      【讨论】:

        【解决方案4】:

        在训练数据集上具有100% 准确度,而在测试数据集上具有80% 准确度并不意味着您的模型过拟合。此外,如果您的模型配备了比训练样本数量[2][5](超大模型示例[1])更有效的参数,它几乎肯定不会过拟合。这与传统的统计学习理论相矛盾,但这些都是经验结果。

        对于参数个数大于样本个数的模型,即使在训练误差为零且训练损失极小的情况下,即使验证损失增加,也最好继续优化逻辑或交叉熵损失[3]。即使批量大小如何[4],这也可能成立。

        澄清(编辑)

        • 我所指的“模型”是具有两个或多个隐藏层的神经网络(也可以是密集层之前的卷积层)。
        • [1] 被引用来表明与经典统计学习理论的明显矛盾,后者认为大型模型可能会在没有某种形式的正则化的情况下过度拟合。
        • 我会邀请任何不同意“几乎肯定不会过拟合” 的人提供一个可重现的示例,其中模型(例如 MNIST/CIFAR 等具有几十万参数的模型)过拟合(在某种意义上随迭代增加的测试误差曲线)。

        [1]Noam Shazeer, Azalia Mirhoseini, Krzysztof Maziarz, Andy Davis, Quoc V. Le,Geoffrey E. Hinton, and Jeff Dean. Outrageously large neural networks: Thesparsely-gated mixture-of-experts layer.CoRR, abs/1701.06538, 2017.

        [2]Lei Wu, Zhanxing Zhu, et al. Towards understanding generalization of deep learn-ing: Perspective of loss landscapes.arXiv preprint arXiv:1706.10239, 2017.

        [3] Daniel Soudry, Elad Hoffer, Mor Shpigel Nacson, Suriya Gunasekar, and NathanSrebro. The implicit bias of gradient descent on separable data.The Journal of Machine Learning Research, 19(1):2822–2878, 2018.

        [4] Elad Hoffer, Itay Hubara, and Daniel Soudry. Train longer, generalize better: clos-ing the generalization gap in large batch training of neural networks. InAdvancesin Neural Information Processing Systems, pages 1731–1741, 2017.`

        [5]Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, and Oriol Vinyals.Understanding deep learning requires rethinking generalization.arXiv preprintarXiv:1611.03530, 2016.

        【讨论】:

          猜你喜欢
          • 2019-12-22
          • 2020-08-09
          • 2018-01-19
          • 2011-11-10
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多