【问题标题】:MNIST: Trying to obtain high accuracyMNIST:试图获得高精度
【发布时间】:2018-04-06 08:47:07
【问题描述】:

我目前正在研究手写数字识别问题。

首先,我已经针对 MNIST 数据集测试了样本手写数字。

我得到了 53% 的准确度,我需要 90% 以上的准确度。

以下是我迄今为止为提高准确性所做的尝试。

  1. 创建我自己的数据集

    • 我已经创建了 41,000 个示例。首先,我制作了一个小型数据集,其中包含 10000 个示例(每个数字 1000 个)。

    • 数据集是按照mnist格式创建的(可能是想在后期将我的数据集和mnist数据集结合起来)。 在此基础上构建的模型准确率接近 65%。

  2. 接近

    • 我一直在使用 softmax 测试我的输入数据,但它对准确性部分没有太大帮助。于是我开始尝试cnn的方式。

所以我的问题是:

  1. 是否有其他方法/算法可以更准确地检测数字。

  2. 我需要对模型进行更多训练吗?

  3. 我需要清理图像吗?

  4. 我正在尝试合并 mnist 数据集和我的数据集(41,000 位数据),看看它是否会提高准确性。

代码

针对 mnist 测试我的图像(在此代码之前运行 mnist)

您可以找到 Ipyhton 笔记本:

  1. 针对 MNIST(脚本 - 1)测试我的示例数字

  2. 根据我的数据集测试我的样本数字(脚本 - 2)

脚本和图像可在此link 获得

【问题讨论】:

  • 我使用过 CNN、Ensemble 模型等,但从未获得 65% 的分数。即使是简单的随机森林模型也能提供 96% 的准确率。
  • @pissall,我使用我的数据集(不是 mnist 的数据)使用了 softmax,为此我得到了 65% 的分数。我正在针对我的数据集使用 CNN,但准确度仍然很低。
  • @shahaf,谢谢分享链接,会看一下。

标签: python opencv tensorflow mnist


【解决方案1】:

首先要注意几点:

  • cnn 和 softmax 不是相互排斥的。您可以将您的 cnn 用于较低级别。您应该使用 softmax 进行预测(往往效果最好,因为只有一个答案)。
  • 很难说你的训练。请考虑在训练数据集和评估集上发布损失图。通常我们应该看到两条线向下并趋于平坦。如果他们没有变平,你应该训练更长时间。如果两条线开始发散,您需要更多的正则化或提前停止。
  • 您应该始终尝试各种参数(层数、神经元激活函数的数量等)。这称为超参数调整,有一些工具可以帮助您,它们通常会改进很多。
  • 除了 cnn 之外,您还应该尝试使用深度神经网络。我已经看到罐装 DNNClassifier 取得了不错的效果。

假设您执行了所有这些操作并且没有看到任何改进,这可能意味着您的数据存在问题。 查看混淆矩阵以查看模型出现问题的位置。查看一些错误分类的示例。根据我的经验,我在数据集中看到几乎无法区分的 1 和 7。这并不完全是一个解决方案,但应该为您指明需要解决的问题的正确方向。

【讨论】:

    【解决方案2】:

    您可以尝试单色图片(如在 Mnist 中每个像素值在 0 到 255 之间)并使用“is pixel i > 0”的测试。这将我们的算法提高到 80%。 此外,您可以尝试将图片划分为帧(尝试 4 或 8)。 此外,您可以基于直线、曲线等构建测试。

    你可以看看我的实现,它给了我高达 91%: https://github.com/orlevy08/Data-Analysis

    【讨论】:

      猜你喜欢
      • 2019-09-04
      • 2017-08-31
      • 2019-04-11
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2020-09-09
      相关资源
      最近更新 更多