首页 > 解决方案 > 我想在这里做什么?train acc: 100%, test acc: 80% 这是否意味着过拟合?

问题描述

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另外,acc : 1.000当我训练我的模型(100%)时,我得到了,但是当我测试我的模型时,我得到了 80% 的准确率。我的模型是否过拟合?

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


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

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

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

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

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

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

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

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


推荐阅读