首页 人工智能

第三节 手写数字识别

字体:16+-

使用Keras的流程如图7-8所示。

图7-8 Keras使用的过程

(1)选择模型

Keras提供序贯式模型和函数式模型两种模型,在以下的例子中将使用序贯式模型。

(2)构建网络层

在以下的例子中使用了卷积网络层和丢弃层(Dropout)。

(3)编译

编译相当于进行搭建,可以使用model.compile( )函数体验其作用。

(4)训练

这是耗费时间的步骤,通过训练计算出所有的网络参数,对应的函数是model.fit( )。

(5)预测

这是使用模型解决问题的步骤。例如,一个用来识别花朵类型的网络,输入花朵图片之后,预测出该花朵的类别。

几乎所有智能手机都支持手写识别,即通过手指或手写笔在屏幕上进行书写,然后识别出所写的字符(图7-9)。下面以手写数字识别为例讲解上述流程并具体实现这个识别任务。

传统计算机视觉方法中,识别手写字体是通过定义特征完成的。例如,某个手写数字带有两个封闭区域,就很可能是8。这样的方法经过不断地特征总结,准确率可以超过90%,这已经达到了可以实际应用的水平。但是当需要识别的类别变得更多的时候,例如,从10个数字增加到3 900个汉字,如果依然通过总结特征进行识别,那么识别率的提升就需要巨大的工作量,也很难提高到可用的程度。

然而通过深度学习,手写识别变成了一项简单的工作。这里的简单是指构建过程简单,但完成这个识别任务的整个工作并不容易,因为深度学习需要做大量的标注训练数据的工作。对手写数字来说,所谓的标注数据,就是通过人工标注各个手写图片到底是什么数字,从而建立图片和数字之间的映射关系(表7-1)。

图7-9 手写数字图片

表7-1 图片标注

在这个案例中,使用的数据集是深度学习经常使用的数据集MINST。这是一个手写数字数据库,包含60 000个训练样本和10 000个测试样本,每个样本图像的宽高为28×28。需要注意的是,此数据集中的图片是以二进制存储的,不能直接以图像格式查看,不过很容易找到将其转换成图像格式的工具。