转自 :https://www.wukong.com/answer/6583135560443887876/?iid=39055545733&app=news_article&share_ansid=6583135560443887876&app_id=13&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_share
谢邀,我给个简单的例子吧,互联网有很多猫的照片,我也很喜欢猫,许多人可以很容易地识别猫,但是我们可以训练计算机这样做吗?答案是显而易见的,可以。
我们在Tensorflow框架上使用了高级Keras API。Keras项目是一个高级Python神经网络API。 它设计为用户友好和模块化,支持多个后端。 默认的Keras后端是Tensorflow,一个符号数学库,广泛用于机器学习和神经网络任务。 我们将训练我们的Keras / Tensorflow设置来对CIFAR-10图像数据集进行分类,这是10%的猫图片。
要使用Tensorflow运行Keras,我们将转换一个带有Tensorflow编译安装的环境,并使用conda添加Python HDF5软件包以及Keras可用于可视化模型的几个图形软件包,以及用于保存历史记录的dill。 然后我们将用pip安装Keras。
CIFAR-10数据集是10个类中的60,000个彩色32x32像素图像的集合,其中10,000个是测试批次。 Keras可以自动下载数据集,但我们可以通过将其下载到/ results来节省时间,并在需要时将该文件复制到正确的位置。
我们将运行128个图像批次并设置两个训练批次运行:一个长的500个批次的运行来完成主要工作,以及一个简短的5个批次的运行作为一个例子。
加载数据并使其成为合理的shape。 还设置了一个函数来查找文件,另一个用于查看我们正在分析的图像,最后设置为进行实时输入数据扩充。
让我们随意选择一些训练图像,如下图所示:
我们将使用一个简单的卷积网络模型(仍处于开发阶段),增加了上面定义的数据扩充,以及一个检查点编写回调函数,它可以显著提高准确性。
最后,让我们看看我们的模型,包括文本summary和流程图。
训练上述模型,训练过程中的打印信息及图片识别如下所示:
那么只要保存模型这个图片识别就成功了,希望对你有帮助~
翻出我曾经写的一篇文章来介绍这个问题。
为大家带来一篇 初步使用Keras深度学习破解验证码 的文章。 当然我们这里识别的是普通验证码,是Laravel常用的验证码库
Captcha for Laravel 5
如下图,又5个数字字母所组成的验证码。我用PHP一共生成了5万个验证码。后面也会提供给大家
导入所需的库
这里我们还是使用Keras,底层使用Tensorflow做为底层库。
本次使用的模型是简单的卷积神经网络模型,后面也会使用更加复杂的模型
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(alternating convolutional layer)和池层(pooling layer)。
一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
配置参数
加载数据
训练模型的时候,我们可以选择两种方式来生成我们的训练数据,一种是直接全部载入内存,然后开始训练,一种是定义一个数据生成器,然后利用 fit_generator 分批加载数据来训练。
因为样本是5万张,但是只有200多M,可以一次性载入内存。
最后会生成pickle文件。python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
如果使用我保存好的pickle文件,可以不用执行下列步骤
加载数据,读取pickle文件
创建模型
开始训练模型
训练完成,进行验证
改进
对于这种按顺序的文字验证码,还有一种更好方法可以使用,那就是循环神经网络来识别序列。 我会在后面继续介绍如何用循环神经网络构建模型。
代码地址:https://github.com/szpnygo/keras-cnn-captcha
Pickle地址:https://pan.baidu.com/s/1i4JiZOT