6

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

这里是 “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可以处理很多数据差异。

+0

什么是您使用的完整拓扑结构?它是原始的LeNet5,还是你改变了任何隐藏层?如果你从零开始训练一个新模型,过度拟合应该看起来像另一个99 +%的成功率;你的20%表明了某种非常不同的问题。 – Prune

+0

是的,它是原创的LeNet5,图层如上所述,它使用MNIST数据集,但不是我的数据集,我的数据集大小为1036个图像,每个数字104。 – kumar030

回答

0

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

+0

我应该从网络中删除图层吗?您可以提供任何建议。 – kumar030

+0

我不是非常愚蠢的与CNN,但我想你可能有太多的隐藏层。可能对你有用:http://cs231n.github.io/neural-networks-1/#arch << ......似乎如果数据不够复杂以防止更小的神经网络可能会更好过度配合>> –

+0

您训练网络有多少个时代?你的数据集的大小是多少? –

0

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

你有两个解决方案,以提高你的CNN:

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

我看到了两个可能的问题:

预处理:MNIST不仅28px X 28px,也:从NIST

将原来的黑色和白色(二层)图像尺寸标准化以适应20x20像素盒子,同时保持其纵横比。作为归一化算法使用的抗锯齿技术的结果,所得图像包含灰度级。通过计算像素的质心,并将图像平移以将该点定位在28x28场的中心,图像以28x28图像为中心。

来源:MNIST website

过度拟合

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

备注

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

+1

好点。只是为了添加另一个选项,也可以考虑批量标准化(https://arxiv.org/abs/1502.03167)。 –