【问题标题】:Artificial Neural Network fails to recognize the image made by Paint人工神经网络无法识别 Paint 制作的图像
【发布时间】:2018-12-16 20:55:37
【问题描述】:

我使用 MNIST 数据集(具有 50000 个训练输入)训练了我的 ANN 并运行。当我尝试 MNIST 数据集中包含的测试输入时,我得到了 91-92%(很高)的准确率。但是,如果我将我的 Paint 图像作为我训练有素的 ANN 的输入,它无法识别数字。即使是最清晰的。但是,如果我从互联网上下载一个数字的图像,它的识别率很高。所以,我不明白为什么我的 ANN 能识别除了 Paint 制作的图像之外的所有东西。 (MNIST 数据集包含在黑色背景上有白色数字的图像。)

【问题讨论】:

  • 正在使用哪种编程语言以及图像是如何读入程序的?
  • Matlab。我通过“imread”函数读取 .png 文件,并将获得的矩阵矢量化,就像我的训练数据集中的矩阵一样。训练输入代表 28*28 像素正方形的图像,我尝试相同的大小。 @pm101

标签: machine-learning artificial-intelligence mnist


【解决方案1】:

谢谢大家,我找到了解决方案。这实际上与文件格式无关。问题是数据集(手写数字)和我由 Paint 生成的测试图像之间的不一致。它们太整洁了,人类无法手写。所以它失败了。然而,在我生成正常(手写而非打字)图像后,它开始以高比率识别。

【讨论】:

    【解决方案2】:

    做了一个实验画图和在线下载一个PNG,两个区别:位深度和颜色深度。

    imread of a PNG with paint automatically creates a uint8 [28x28x3] matrix
    
    imread of a downloaded PNG creates a uint16[28x28] matrix
    

    用您的工作 PNG 仔细检查这一点

    尝试在 MATLAB 中将绘画转换为相同的格式,对我来说,例如:

    png_paint_16 = uint16(rgb2gray(imread('PANTPNG.png')))*257
    

    【讨论】:

    • 实际上,当我尝试下载图像时,我发现它们也是 3 维的并且具有深度。出于这个原因,我将像素值移动到一个向量并摆脱了第三维。如果其中一个矩阵(油漆或下载)的尺寸小于 3,我会得到一个错误。因为我正在为我阅读的任何图像执行此“第三维删除”。我尝试了您的代码进行转换,但不幸的是它仍然失败。 @pm101
    【解决方案3】:

    检查来自 Paint 的图像格式是否与用于训练网络的图像格式匹配。

    如果格式不同,Paint 图像(位图?)中数字的特征可能与训练数据/下载图像中的网络被训练识别(压缩?)的特征不匹配。

    【讨论】:

    • 如果您要询问的话,它们都是 .png 文件。或者也许我无法理解你的确切意思。如果它们都是PNG图像,还有什么需要分析的吗? @mids
    猜你喜欢
    • 2012-02-04
    • 2012-03-04
    • 2015-10-15
    • 1970-01-01
    • 2015-02-20
    • 2020-03-12
    • 2016-03-18
    • 2016-09-15
    • 2014-03-15
    相关资源
    最近更新 更多