实用性高的那种教程:使用Tensorflow和Keras进行手写识别

手写体识别(也就是由手写体分类)是一个具有挑战性的问题,因为每个个体写作风格有巨大的差异。解决这个问题的传统方法是提取诸如不同字母的曲率、字母b/w的间隔等的语言相关特征,然后使用类似SVM的分类器来区分作者。在本文中,将会展示一个基于深度学习的方法来识别这些功能。我们将把小块的手写图像传递给CNN,并用softmax分类损失进行训练。

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

为了演示这种技术的有效性,让我们用它来分类英文手写文本。

完整的代码:

https://github.com/priya-dwivedi/Deep-Learning/blob/master/handwriting_recognition/English_Writer_Identification.ipynb

获取的数据

IAM手写数据库是英文手写图像的最大数据库。它有1539页由600多名作家编写的扫描文本。为了达到这个演示的目的,我们将拿出数量最多的前50名作家。对于每个作者来说,数据库是由他们编写的单个句子的集合。以下是其中一个作者的示例:

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

神经网络不需要太多的原始数据预处理。所以我们不会对这些图片做任何修改,而是将完整的图片传递给神经网络,还会传递一小段文字。

生成的补丁数据

我们希望神经网络能够理解个体作家的写作风格,也希望这个神经网络能独立于文本(可以在任何语言上工作)。所以不是传递单个的句子或单词,而是传递随机的文本片段。这是通过从每句话随机裁剪113x113大小的补丁来完成的。下面的图片是8个这样的补丁拼贴。

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

8个补丁组成的拼贴画

我们可以编写一个生成器函数来移动每个句子,并从中产生随机的图像块。对于每个图像,我们将限制到可以生成的补丁总量的30%。

模型和结果

为此,我们可以使用Tensorflow后端在Keras中构建一个卷积神经网络(CNN)。这里将使用具有多个卷积和maxpool层的标准CNN,一些密集层和一个softmax激活的最终输出层。在卷积层和密集层之间使用RELU激活,并使用Adam优化器对模型进行优化。

模型的大小需要与数据的大小成正比。三个卷积最大层和几个致密层就足以解决这个问题。具体参见下面的模型总结:

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

CNN模型概述

经过一些超参数调整之后,我们在模型测试数据集上损失了94%。

请参阅下面的两个补丁,该模型被分类为同一个作者。 “t”的形状看起来非常相似,所以也会让人直观地觉得属于同一个作者。

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

实用性高的那种教程:使用Tensorflow和Keras进行手写识别

总结

使用深度学习的手写识别是一种非常强大的技术,原因如下:

·它自动识别出强大的功能

·我们采用随机补丁的方法使模型文本独立

·预测精度高,可以在实际应用中使用

相关推荐