基于TensorFlow的CNN自由手写数字识别研究
2020-07-04徐颂民江玉珍
徐颂民 江玉珍
摘要:CNN卷积神经网络是图像识别和分类等领域的前沿研究方法。由于CNN模型训练效果与实际测试之间存在较大的差距,为提高自由手写数字的识别率,尝试使用TensorFlow搭构CNN网络模型,在完成MNIST数据集训练的基础上实现对自由手写数字的识别,并根据两种样本状态的差别和识别结果提出效果分析及改进方法,实验证明该改进方法获得明显效果。
关键词:手写数字;卷积;神经网络;深度学习;训练本样
中图分类号:TP399 文献标识码:A
文章编号:1009-3044(2020)13-0011-02
3实验效果及分析
3.1 MNIST训练结果
MNIsT训练实验在迭代5000次后,获得接近100%的准确率和0.0033的低代价值。测试集也获得整体98.17%的高准确率,充分证明该CNN模型的强拟合性能。
3.2自由手写数字的测试结果
实验先在白纸上用黑色中性笔随机写下一串数字,摄取图像,裁切、缩小于28*28像素并保存为PNG灰度图,在该基础上进行单字识别及批量识别测试。
实验1:单字识别。图2为手写单数字6及其识别的输出结果,softmax函数输出所有10类结果中,第7个值是0.9053704,明显高于其他分类值,因此argmax函数识别结果为数字“6”(第1个分类值由“0”计起),这个结果与我们的实验期望是相符的。
实验2:批量自动识别。在随机长度的批量识别中发现,准确率与期望值存在不少差距,如对图3手写"5347"经批量分类计算后输出为“5847”,系统将“3”识别为“8”。实验对100个自由手写数字进行批量识别计算,整体的正确识别率仅为76%。
3.3结果分析及方法改进
经过对自由案例和训練集案例的比对,不难发现训练与实测差距的原因:1)在MNIST数据集数字样本是黑底白字,而手写数字样本经反相处理后底色是深灰色的,背景色之间存在较大差异;2)手写数字样是在白纸上书写后经手机摄像输入处理,纸面的纹理在一定程度上形成了噪声而影响了检测。如图4,对“3”字的输入图进行反相及放大后可明显反映出以上2个特点。
针对上述问题,改进的方法有2种:
1)扩充训练集,扩增大量带噪和带背景的训练样本。这种方法可直接让系统具有带噪及带背景的识别力,从本质上能提升系统的鲁棒性,但样本集的扩增需要非常大的工作量。
2)调整现有待测数据,即对待测图再进行增强预处理使其更接近训练集的样式。
相比之下,方法2)更加简单易行,实验用python程序PIL库的ImageEnhance模块对所有手写数字图进行明亮度和对比度的增强处理,明亮度参数和对比度参数均为1.5,增强后待测图集如图6。重新对数据进行识别计算,系统的正确识别率提升至93%。
4结束语
CNN是目前公认的深度学习的一种成功算法,尤其适用于图像分类和识别处理。基于CNN的图像识别算法已被证明优于传统算法,但CNN算法也并非就是万能算法,一个好的识别模型,与内部函数选取、训练集质量及规模等因素息息相关。此外,待检测图像的预处理效果对算法的识别效果也起着举足轻重的作用。在深度学习图像识别计算中,目标区域分割、分割区形状矫正、去噪、纹理增强等都是图像识别前预处理的研究热点。