MNIST:试图获得高精度

时间:2018-04-06 08:47:07

标签: python opencv tensorflow mnist

我目前正致力于手写数字识别问题。

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

我的准确度达到53%,我需要90%以上的准确率。

以下是我迄今为止为提高准确性而尝试过的事情。

  1. 创建了我自己的数据集

    • 我创建了41,000个示例。为了开始,我做了一个小数据集,它有10000个例子(每个数字1000个)。

    • 数据集是在mnist格式的行上创建的(可能是想在后期使用数据集和mnist数据集进行处理)。 基于此建立的模型的准确率接近65%。

  2. 方法

    • 我一直在使用 softmax 测试我的输入数据,但它对准确性部分没什么帮助。所以我开始尝试 cnn 方式。
  3. 所以我的问题是:

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

    2. 我是否需要更多地训练模型?

    3. 我需要清理图像吗?

    4. 我正在研究mnist数据集和我的数据集(41,000位数据),看它是否能提高准确度。

    5. 代码

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

      您可以找到Ipyhton笔记本电脑:

      1. 根据MNIST(脚本 - 1)

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

      4. link

        提供了脚本和图片

2 个答案:

答案 0 :(得分:3)

首先注意几点:

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

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

答案 1 :(得分:0)

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

您可以看一下我的实现,该实现使我达到了91%: https://github.com/orlevy08/Data-Analysis