我要在这里做什么?训练acc:100%,测试acc:80%这是否意味着过拟合?

时间:2019-03-14 08:21:43

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

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%的准确性。我的模型是否过拟合?

4 个答案:

答案 0 :(得分:2)

好,让我们从顶部开始

首先,metrics = ['accuracy'],可以在多个参数上评估模型,准确性是指标之一,其他可以是binary_accuracycategorical_accuracysparse_categorical_accuracy,{{ 1}}和top_k_categorical_accuracy,它们只是内置的,您甚至可以创建自定义指标,要更详细地了解指标,您需要对神经网络中的sparse_top_k_categorical_accuracy有清晰的了解,您可能知道损失函数必须是可微的以便能够进行反向传播,在loss的情况下这不是必需的,度量仅用于模型评估,因此甚至可以是不可微的函数,甚至在他们的文档中也提到过在Keras中使用

  

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

您可以自己定义一个不可微的精度,但可以根据您的模型需求创建目标函数。

  

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

现在, metrics可能仅仅是因为它甚至还没有完成一个小批量的传播,因此还不能给出准确度得分,我对此没有给予太多的关注,但是它通常会停留在那几秒钟,因此来自那个。

最后:训练后模型性能下降了20%,是的,这可能是过度拟合的情况,但是没有人不能不查看数据集就知道这一点,但很可能是这样,过度拟合,您可能需要查看表现不佳的数据以了解原因。

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

答案 1 :(得分:1)

在训练数据集上具有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.

答案 2 :(得分:0)

从问题的第一部分开始-

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

问题的第二部分-acc是模型在那个时期的准确性。
这可以并且将根据模型中定义的度量标准而改变。

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

答案 3 :(得分:0)

因此metrics=['accuracy']的含义实际上取决于您使用的损失函数。您可以看到keras如何从line 375向下进行处理。由于您使用的是categorical_crossentropy,因此您的情况遵循elif中的逻辑(第386行)。因此,您的指标功能设置为

metric_fn = metrics_module.sparse_categorical_accuracy

有关sparse_categorical_accuracy背后逻辑的描述,请参见this post,在您的情况下,它应该清除“ accuracy”的含义。它基本上只是计算您的预测(具有最大概率的类别)与真实的类别相同的数目。

火车与验证的准确性可能显示过度拟合的迹象。为了测试该图,列车精度和验证精度彼此之间相互对照,并查看验证精度在何时开始下降。请遵循this,以获取有关如何绘制精度和损耗等以测试过度拟合的良好描述。