‘壹’ 图像识别 | 基于Keras的手写数字识别(含代码)
前沿
人工智能的浪潮已经席卷全球,深度学习(Deep Learning)和人工智能(Artificial Intelligence, AI)等词汇也不断地充斥在我们身边。人工智能的发展是一个三起两落的变化,90年代期间,知识推理>神经网络>机器学习;2005年左右,机器学习>知识(语义网)>神经网络;而从2017年之后,基于深度学习的神经网络>知识(知识图谱)>机器学习。
卷积神经网络(convolutional neural network, CNN)作为深度学习中的代表,最早的灵感是来源于1961年Hubel和Wiesel两位神经生物学家,在对猫视觉皮层细胞的实验中,发现大脑可视皮层是分层的(CNN中的分层网络结构与其如出一辙)。深度学习作为机器学习(ML)的一个子领域,由于计算机能力的提高和大量数据的可用性,得到了戏剧性的复苏。但是,深度学习是否能等同或代表人工智能,这一点笔者认为有待商榷,深度学习可以认为是目前人工智能发展阶段的重要技术。由于本文主要撰写关于深度学习的入门实战,关于细节概念不做深入研究,下面笔者从实际案例,介绍深度学习处理图像的大致流程。
目录:
以手写识别数字为例,作为深度学习的入门项目,本文以Keras深度学习库为基础。其中使用的tensorflow等模块需要提前配置好,同时注意模型,图片保存、载入的文件路径问题。在自己的计算机上运行时,需要创建或修改。下面的流程包括:使用Keras载入MNIST数据集,构建Lenet训练网络模型,使用Keras进行模型的保存、载入,使用Keras实现对手写数字数据集的训练和预测,最后画出误差迭代图。
手写数字数据集介绍:
手写数字识别几乎是深度学习的入门数据集了。在keras中内置了MNIST数据集,其中测试集包含60000条数据,验证集包含10000条数据,为单通道的灰度图片,每张图片的像素大小为28 28.一共包含10个类别,为数字0到9。
导入相关模块:
载入MNIST数据集
Keras可实现多种神经网络模型,并可以加载多种数据集来评价模型的效果,下面我们使用代码自动加载MNIST数据集。
显示MNIST训练数据集中的前面6张图片:
数据的预处理
首先,将数据转换为4维向量[samples][width][height][pixels],以便于后面模型的输入
为了使模型训练效果更好,通常需要对图像进行归一化处理
最后,原始MNIST数据集的数据标签是0-9,通常要将其表示成one-hot向量。如训练数据标签为1,则将其转化为向量[0,1,0,0,0,0,0,0,0,0]
模型的建立与计算
训练模型的参数设置:
本文使用Lenet网络架构,下面定义Lenet网络结构,若要更改网络结构,如用VGGNet,GoogleNet,Inception,ResNets或自己构建不同的网络结构,可以直接在这一块函数内进行修改。
再附上两个经典的模型:
VGG16:
GoogleNet:
设置优化方法,loss函数,并编译模型:
本文使用生成器以节约内存:
结果分析
作出训练阶段的损失、精确度迭代图,本文将epoch设置为10,已达到0.98的准确率(代码、图像如下所示)。
公众号:帕帕 科技 喵
欢迎关注与讨论~
‘贰’ 按键精灵里,图片更换后识别点击实现代码
1.把变化前的图截图(不要截太满),存为A.bmp,然后添加到附件里面。
2.复制下面代码到脚本运行测试即可
Do
FindPic 0,0,2000,2000,"Attachment:\A.bmp",0.9,intX,intY
If intX > 0 And intY > 0 Then
MoveTo intX,intY
Delay 100
LeftDoubleClick 1
Delay 100
End If
Loop
注意这里LeftDoubleClick 1,最好用下面三种方式也都测试一遍,以保证你的机器有效。
1.LeftDoubleClickS
2.LeftDoubleClickH
3. LeftClick 1
Delay 20
LeftClick 1
最好关闭360运行