奇书网

奇书网>人工智能板块 > 第三节 手写数字识别(第1页)

第三节 手写数字识别(第1页)

第三节手写数字识别

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

图7-8Keras使用的过程

(1)选择模型

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

(2)构建网络层

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

(3)编译

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

(4)训练

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

(5)预测

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

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

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

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

图7-9手写数字图片

表7-1图片标注

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

接下来的代码将引导读者下载数据、构建网络、训练网络。使用的网络是在处理图片数据时非常有效的卷积神经网络。尽管这个案例搭建网络的过程很简单,但是读者可以据此进行更深入地探索。这一节编写代码的方式与前几章稍有不同,可以把它们保存成。py文件后直接运行,其中每一部分的含义已经在相应位置做了详细注释。读者在掌握了基本方法后,还可以尝试对参数进行调整,并观察调整后的识别效果,从而进一步理解这种方法。

from__future__importprint_fun

#导入这个模块是增加Python不同版本之间兼容性的一种做法

importkeras

#导入keras模块

fromkeras。datasetsimportmnist

#导入数据库函数,因为国内访问亚马逊云速度较慢,也可以不用这种方式下

#载数据,而是从教材资源平台下载并读取数据

fromkeras。modelsimportSequential

#使用keras的序贯模型

fromkeras。layersimportDe,Flatten

fromkeras。layersimportaxPooling2D

#导入需要使用的网络层,包括稠密层、Dropout层、压平层、二维卷积层、

#池化层

fromkerasimportbadasK

#导入后端

batch_size=128

热门小说推荐

最新标签