CNN 上的数字识别

Posted

技术标签:

【中文标题】CNN 上的数字识别【英文标题】:Digit Recognition on CNN 【发布时间】:2016-11-18 06:58:31 【问题描述】:

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

这里是“2”个数字图像样本 -

我将每张图片的大小调整为 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 可以处理大量数据变化。

【问题讨论】:

您使用的完整拓扑是什么?是原来的 LeNet5,还是你改变了任何隐藏层?如果你从头开始训练一个新模型,过拟合应该看起来还有 99+% 的成功率;你的 20% 表明了某种完全不同的问题。 是的,它是原始的 LeNet5,层如上所述,它适用于 MNIST 数据集,但不适用于我的数据集,我的数据集大小是 1036 幅图像,每个数字 104 幅。 【参考方案1】:

我发现两个可能的问题:

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

来自 NIST 的原始黑白(双水平)图像经过尺寸标准化以适合 20x20 像素的框,同时保持其纵横比。由于归一化算法使用的抗锯齿技术,生成的图像包含灰度级。通过计算像素的质心,将图像置于 28x28 图像的中心,并平移图像以将该点定位在 28x28 场的中心。

来源:MNIST website

过拟合

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

备注

有趣的想法!您是否尝试过简单地将经过训练的 MNIST 网络应用于您的数据?结果如何?

【讨论】:

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

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

【讨论】:

我是否应该从网络中删除图层,您可以提供任何建议。 我对 CNN 不是很熟悉,但我猜你可能有太多隐藏层。可能这对你有用:cs231n.github.io/neural-networks-1/#arch > 您的网络训练了多少个 epoch?你的数据集有多大?【参考方案3】:

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

您有两种解决方案来改进您的 CNN:

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

【讨论】:

以上是关于CNN 上的数字识别的主要内容,如果未能解决你的问题,请参考以下文章

基于CNN的手写数字识别

基于CNN的手写数字识别

基于CNN的手写数字识别

CNN实现手写数字识别

CNN-mnist手写数字识别

使用CNN做数字识别和人脸识别