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%的准确性。我的模型是否过拟合?
答案 0 :(得分:2)
好,让我们从顶部开始
首先,metrics = ['accuracy']
,可以在多个参数上评估模型,准确性是指标之一,其他可以是binary_accuracy
,categorical_accuracy
,sparse_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]
来表明与经典的统计学习理论有明显的矛盾,经典的统计学习理论认为大型模型在没有某种形式的正则化的情况下可能会过拟合。答案 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,以获取有关如何绘制精度和损耗等以测试过度拟合的良好描述。