CNN上的数字识别

时间:2016-07-15 07:01:47

标签: machine-learning ocr deep-learning image-recognition handwriting-recognition

我正在测量卷积神经网络上的打印数字(0-9)。它在MNIST数据集上提供99%以上的准确度,但当我尝试使用安装在计算机上的字体(Ariel,Calibri,Cambria,Cambria math,Times New Roman)并训练字体生成的图像(每种字体104张图像(总计) 25种字体 - 每种字体4张图像(差别很小))训练误差率不低于80%,即准确率为20%。为什么?

这是“2”号图像样本 -

"2" Number Images

我将每张图片调整为28 x 28。

以下是更多细节: -

训练数据大小= 28 x 28张图像。 网络参数 - 作为LeNet5 网络架构 -

Input Layer -28x28
| Convolutional Layer - (Relu Activation);
| Pooling Layer - (Tanh Activation)
| Convolutional Layer - (Relu Activation)
| Local Layer(120 neurons) - (Relu)
| Fully Connected (Softmax Activation, 10 outputs)

这样可以在MNIST上获得99 +%的准确率。计算机生成的字体为何如此糟糕? CNN可以处理大量的数据差异。

3 个答案:

答案 0 :(得分:2)

我看到两个可能的问题:

预处理:MNIST不仅是28px x 28px,而且还是:

  

NIST的原始黑白(双层)图像尺寸标准化,以适应20x20像素的盒子,同时保留其纵横比。由于归一化算法使用的抗锯齿技术,所得到的图像包含灰度级。通过计算像素的质心,并将图像平移到28x28场的中心位置,图像以28x28图像为中心。

来源:MNIST website

<强>过拟合

  • MNIST有60,000个培训示例和10,000个测试示例。你有几个人?
  • 您是否尝试过辍学(请参阅paper)?
  • 您是否尝试过数据集扩充技术? (例如稍微移动图像,可能会稍微改变宽高比,你也可能会增加噪点 - 但是,我认为这些不会有帮助)
  • 您尝试过较小的网络吗? (你的过滤器有多大/你有多少过滤器?)

<强>说明

有趣的想法!您是否尝试过简单地在数据上应用经过培训的MNIST网络?结果是什么?

答案 1 :(得分:0)

这可能是一个过度拟合的问题。当您的网络过于复杂而无法解决问题时,可能会发生这种情况。 查看此文章:http://es.mathworks.com/help/nnet/ug/improve-neural-network-generalization-and-avoid-overfitting.html

答案 2 :(得分:0)

这绝对看起来像是过度拟合的问题。我看到你有两个卷积层,两个最大池层和两个完全连接。但总共有多少重量?每个类只有96个示例,这肯定小于您在CNN中的权重数。请记住,您希望训练集中的实例数至少比CNN中的权重多5倍。

您有两种解决方案可以改善您的CNN:

  • 摇动训练集中的每个实例。你每个数字约1个像素左右。它已经将您的训练集乘以9。
  • 使用变压器层。它会在每个时代为每个数字添加弹性变形。它会通过人为增加你的训练集来加强学习。此外,它可以更有效地预测其他字体。