python - 我想在这里做什么?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% 的准确率。我的模型是否过拟合?
解决方案
好的,让我们从顶部开始,
首先, 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%,是的,这可能是过度拟合的一种情况,但没有人可以在不查看您的数据集的情况下确定,但很可能是的,它是过度拟合的,您可能需要查看知道原因的数据表现不佳。
如果有什么不清楚,没有意义,请随时发表评论。
推荐阅读
- typescript - 如何在 Node.js 中声明默认导出的类型
- reactjs - 如何动态扩展或组合 Yup 模式
- c# - 在 ASP.NET MVC 中处理文件
- garbage-collection - 关于 GC 和 DisplayCompositor 的一些问题
- javascript - 如何使用 createelement 添加多个单元格?
- ios - ReactNative:在多行文本输入滚动时关闭键盘
- c# - 为什么 Gridview 的更新控件行为异常?
- javascript - 仅协议方案支持跨源请求。Node.js 服务器 Angular 前端
- php - Slim 框架:不允许方法 不允许方法。必须是以下之一: POST
- java - 关于 log.error 的 PMD 警告是否有解决方案