【人工智能】图像识别之小白天书——验证码篇(4)

介绍

大家好!非常高兴又和大家见面了!不知道上一篇那些浓浓的理论知识大家理解了多少?有了那些上乘的内功打下根基,我今天再传授你一些招式,相信很快你就可以独当一面了!我们今天要学的就是一套上手极易!变化很大!威力惊人的招式!

【人工智能】图像识别之小白天书——验证码篇(4)


这套武功的名字就叫Keras宝典!欲练此功,必先自…必先熟读并理解上一篇!

Keras是一个高层神经网络库,Keras由纯Python编写而成,可以很好的运行于Tensorflow库或Theano库。Keras为支持快速实验而生,能够把你的想法、创意迅速转换为结果,如果你有如下需求,请选择Keras:

·        简易和快速的原型设计(Keras具有高度模块化,极简,可扩充特性)

·        支持CNN(卷积神经网络)和RNN(循环神经网络),或二者的结合

·        支持任意的链接方案(包括多输入和多输出训练)

·        无缝CPU和GPU切换


上述是官方对Keras的评价。 其实现在Python的机器学习库有很多,据不完全统计有139个之多!它们各具特色,甚至还有带图形界面的,囧。其中公认最成熟的要属Theano和谷歌的力推的亲儿子Tensorflow!而我们要学的Keras可以任意在这两个优秀的库之间切换,并且具备了学习成本低和研发、迭代速度快等很多优点,可谓老少皆宜,居家必备之良品!


环境&配置

从这一章开始咱们的环境均使用类unix系统。

这一章咱们先基于Theano backend,至于Tensorflow,后面有关于的它的详细介绍及实战讲解,咱们也得照顾一下大谷歌的亲儿子是不是!(它现在确实非常流行)

安装过程可以说是非常简单,也可以说是非常艰难,我们来看看官方给出的安装指南:

>>> sudo pip install -U --pre pip setuptools wheel

>>> sudo pip install -U --pre numpy scipy matplotlibscikit-learn scikit-image

>>> sudo pip install -U --pre theano

>>> sudo pip install -U --pre keras

然后进入Python终端验证:

【人工智能】图像识别之小白天书——验证码篇(4)

图1 验证环境是否安装成功

没有报错就完成了……

呵呵我真想install你一脸!反正我是没成功。实际上你可能遇上各种各样的问题需要调上一天时间!文章结束我会把一些最有用的填坑指南网址附上,争取不管你遇到什么奇葩的问题都可以找到解决的办法。

看我图中显示的是“Using Theanobackend”,为了避免默认是Tensorflow backend,去这里修改:~/.keras/keras.json,这里的“backend”改成Theano即可。

【人工智能】图像识别之小白天书——验证码篇(4)

图2 keras.json配置文件

使用

这一张我们来用keras来搭建一个简单的神经网络,训练它识别一些验证码。本章主要讲搭建网络结构来训练嘛,图片就偷点懒,用我们小白天书第一篇中切割出来的那些验证码,下面就让我们用神经网络代替KNN算法,识别验证码!

按照惯例,第一件事还是准备样本!正如我们前文所说的,这个打标的过程就没那么好玩了…

【人工智能】图像识别之小白天书——验证码篇(4)

图3 样本集

根据验证码的难易程度,切出相应数量的样本打标。这个还是我们第一章用的验证码,很简单,所以每一类只要有几个样本就够了,我这里准备了284个样本,尽可能的去覆盖每一类所有的可能切割出来的形态。正某人就曾经有过手动打4000个标的经历,那酸爽,打一会儿就睡着了,醒了继续打……

样本准备好了,现在就开始建立模型吧!网上现在大部分教程都是停留在构建网络结构上,今天我们就把高高在上的神经网络就带入实际的应用场景,针对某一个验证码来一次构建网络+训练模型+识别的全教程!并且把过程一一细化,让你知道每一行代码是在做什么。直接上交一份代码,详细解析写在注释里:

【人工智能】图像识别之小白天书——验证码篇(4)

图4 建立训练模型

这就是全部模型结构的代码了,对于我们这种比较简单的验证码,不需要多复杂的网络结构,只要恰当的三层加上合适的目标函数、优化函数就可以了。

建立好模型之后,我们来看训练的相关代码,图5、4是连在一起的,图5的前半段也是属于图4中train_examples方法,要注意。

【人工智能】图像识别之小白天书——验证码篇(4)

图5 训练相关代码

不出意外的话,控制台应该输出了这样的结果:

【人工智能】图像识别之小白天书——验证码篇(4)

图6 训练log

由于early stop的机制,我们进行了102轮的迭代就结束了。结束时我们的识别正确率和验证的正确率从都已经到了95%以上,训练损失和验证集损失都处于一个较小的状态,由于这个验证码相对比较简单,这就完全足够了。复杂的验证码则要求损失越小越好。

恭喜你!!!你已经完成一次完整的机器训练的任务,提升到了2级!

已经可以用刚才训练出来的模型(就是代码训练完成后生成的json和weight结尾的文件)!识别代码如下:

【人工智能】图像识别之小白天书——验证码篇(4)

图7 识别图片

运行程序,得到结果:

【人工智能】图像识别之小白天书——验证码篇(4)


图8 识别结果展示

哈哈!是不是觉得自己离大神又近了一步!没错!你已经具备了用Keras简单的搭建人工神经来识别验证码了!如果熟练掌握这些技能,就可以轻松地K.O市面上50%以上的验证码了,是不是很牛?

那另外那50%呢?比较复杂的验证码,只用普通的神经网络来训练就有些相形见绌了,我们需要更厉害的黑科技!那就是CNN(卷积神经网络)和RNN(循环神经网络)。只要你会Keras,用它们也是很简单滴~在稍后奉上的《小白天书进阶版》中,一定会带你了解各种高深的神经网络!持续关注我们吧!

附:安装keras填坑指南
Keras中文文档:http://keras-cn.readthedocs.io/en/latest/
import报错:http://zhanxw.com/blog/2013/11/%E5%AE%89%E8%A3%85theano/

疑难杂症:http://blog.csdn.net/leexurui/article/details/52352094

失败解决办法:http://blog.csdn.net/leexurui/article/details/52352094 

【人工智能】图像识别之小白天书——验证码篇(4)

【人工智能】图像识别之小白天书——验证码篇(4)


【人工智能】图像识别之小白天书——验证码篇(4)

微信扫一扫
关注该公众号