神经网络类有关论文范文素材 和Android平台上基于卷积神经网络的手写数字识别实验方面本科论文怎么写

本论文为您写神经网络毕业论文范文和职称论文提供相关论文参考文献,可免费下载。

Android平台上基于卷积神经网络的手写数字识别实验

Android平台上基于卷积神经网络的手写数字

识别实验

朱虎明,罗?政,缑水平,田小林,焦李成,张小华

(西安电子科技大学 电子工程学院,陕西 西安 710071)

摘?要:卷积神经网络算法由于良好的性能已经广泛使用在自动驾驶、语音识别和图像分类等领域,为增强学生学习和利用卷积神经网络算法的能力,文章设计在Android平台上基于TensorFlow卷积神经网络的手写数字识别实验,并说明实施过程,同时介绍卷积神经网络算法、Android平台相关技术原理和实验过程.

关键词:卷积神经网络; 手写数字识别;Android; TensorFlow

1背?景

2006年加拿大多伦多大学的Hinton教授提出了基于“逐层训练”和“精调”的两阶段策略,解决深度神经网络中参数训练的难题,此后纽约大学的LeCun、蒙特利尔大学的Bengio和斯坦福大学的Andrew Ng等人对深度神经网络展开研究,并提出深度自编码器(Deep Auto Encoder)、深度置信网(Deep Belief Networks)、卷积神经网络(Convolutional Neural Networks)等深度模型[1].深度神经网络获得学术界和工业界的广泛关注,在围棋和德州等领域获得突破性进展,而且深度学习的相关课程也逐渐进入高校.在国内,吴立德教授在复旦大学开设了深度学习课程;在国外,一些知名高校也开设了深度学习课程,如斯坦福大学、牛津大学、纽约大学等.目前,深度学习在本科教学中目前涉及的内容还比较少,为帮助学生更好的理解和学习算法,笔者设计在Android平台上进行深度学习实验,实验以卷积神经网络为例,利用TensorFlow深度学习框架并将其应用于手写体识别.

卷积神经网络是近年发展起来并引起广泛重视的一种高效识别方法.20世纪60年代,Hubel和Wiesel在研究猫脑皮层中的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出卷积神经网络.现在,卷积神经网络已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于卷积神经网络算法避免了对图像手工提取特征等步骤,因而得到更为广泛的应用.

随着智能终端在全球范围内的普及,目前主流的智能手机操作系统有谷歌公司的Android系统、苹果公司的iOS系统和微软公司的Windows Phone系统,由于Android系统的开源特性,使得华为、三星、小米等厂商的手机都采用了Android操作系统.2017年5月,NetMarketShare数据网站公布了手机操作系统市场份额,其中Android系统的占有率是65.19%,排名居首.鉴于Android系统越来越广的使用领域,目前高校开设了很多基于Android系统的实验类课程[2-3].

2015年11月9日,Google发布并开源第二代人工智能学习系统TensorFlow[4],其命名源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端的计算,TensorFlow是将复杂的数据输入至人工智能神经网中进行分析和处理过程的系统,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行.

2卷积神经网络算法介绍

卷积神经网络是一种前馈神经网络[5],其基本结构一般包括两层:其一为特征提取层,每个神经元的输入与前一层的局部感受相连,并提取该局部的特征[5],一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等.

卷积神经网络主要用来识别位移、缩放及扭曲不变性的二维图像[6-8].由于卷积神经网络的卷积层通过训练数据进行学习,所以在使用时,避免了显式的特征提取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习.

本次实验的卷积神经网络是由两个卷积层(conv)、两个池化层(pool)和两个全连接层(fc)以及一个softmax组成.第一层卷积层有32个5*5的卷积核,网络采用了Relu(Rectified Linear Unit 修正线性函数)作为激活函数.第二层是最大池化层,求取特征图后,用大小为2*2池化窗口对特征图进行池化操作.第三层中,有64个5*5的卷积核,同样采用Relu作为激活函数.第四层也是池化窗口为2*2的最大池化层.第五层是全连接层,有1024个神经元.为了减少过拟合,在输出层之前加入dropout算子.只在训练过程中启用dropout.第六层也是全连接层,有10个神经元.最后添加一个softmax层,将网络输出值转换成概率值,网络结构如图1所示.

3实验步骤

实验过程分为两个部分,训练过程和推理过程.在训练过程中,首先要建立卷积神经网络的网络结构,同时设置训练过程的一些超参数,如学习率、动力因子、最大迭代次数等,接着使用训练集对网络参数进行训练,但在部分情况下,会把训练集划分出一部分作为验证集用来交叉验证.推理过程是用测试集对模型进行验证.实验流程如图2所示.

3.1训练过程

卷积神经网络训练过程在计算机上完成,分为3个步骤:①建立卷积神经网络网络结构;②利用带有GPU的计算机训练模型;③保存模型.

(1)建立卷积神经网络网络结构.

TensorFlow深度学习框架提供了python语言的API接口,因此利用python编程语言编写训练代码,建立卷积神经网络的网络结构,本次实验参考TensorFlow给出的Deep MNIST for Experts模型训练卷积神经网络.

(2)利用带有GPU的计算机训练模型.

在建立好网络结构之后,下一步是训练模型,训练模型的时间一般比推理时间长很多,且模型的超参数会影响正确率,所以一般需要多次训练,一般采用安装有GPU的计算机进行训练,由于GPU强大的计算能力,可以大大缩短深度神经网络的训练时间.

本次实验采用的是MNIST数据集,手写数字MNIST数据库包含一个训练样本集和一个测试样本集,训练样本集包含60,000个样例,测试样本集包含10,000个样例.图片被归一化成一张放在中间部位的28*28像素的灰度图.该数据集包含0~9共10类阿拉伯数字.数据集共包含4个文件,它们分别是训练样本数据集、训练数据样本标签集、测试用例数据集和测试用例数据标签集.MNIST的部分样例如图3所示.

本实验中,训练优化方法分别采用Adagrad、GradienDescent和Adam,其中GradienDescent优化方法测试了多组参数,对比识别的准确率(见表1)发现,GradientDescent(学习率为0.001)的正确率最高,因此网络采用GradientDescent(学习率为0.001)的优化算法.

(3)保存模型.

在模型训练结束后,使用TensorFlow的API函数tf.gfile.FastGFile()将模型保存为.pb文件,该函数既能保存模型的结构,又能够保存模型中参数的值.

3.2推理过程

推理过程分为两个步骤:①搭建Android平台上的卷积神经网络系统;②系统性能测试.

(1)搭建Android平台上的卷积神经网络.

本次实验所用到的集成开发软件为Android工具Android studio IDE,设计开发的Android应用程序分为两个部分,第一部分是UI界面的设计,第二部分是将采集的测试样本进行推理.

UI界面设计主要是和用户进行交互,实验中使用了两个Button和一个Bitmap控件.系统界面布局如图4所示,本次实验中Android应用通过Bitmap和Canvas操作使得界面自适应屏幕大小.通过Android触控屏记录手写过程的轨迹,并将手写轨迹存储为图像数据即可生成了手写体数据.执行图像预处理,即后台处理生成bitmap,作为模型的输入.一个Button用作清屏,另一个Button用作触发推理事件,即调用训练好的模型进行推理,并且将返回推理结果更新到界面上.

接下来是将TensorFlow移植到Android平台上,首先编译在Android平台上调用TensorFlow模型需要的jar包和so文件;接着将训练好的模型pb文件放入项目中app/src/main/assets位置,添加jar包和so文件;接下来是创建接口和实现调用,分为四步:导入jar包、导入so文件、Tensorflow 接口初始化和模型的调用.

①导入jar包.

import org...TensorFlowInferenceInterface

②导入so文件.

System.loadLibrary(“tensorflow_inference”)

③Tensorflow 接口初始化.

private TensorFlowInferenceInterface inferenceInterface 等于 new TensorFlowInferenceInterface();//接口定义

inferenceInterface.initializeTensorFlow(getAssets(), MODEL_FILE);//接口初始化

④模型的调用.

inferenceInterface.fillNodeFloat(INPUT_NODE, new int[]{1, HEIGHT, WIDTH, CHANNEL}, inputs);//送入输入数据

inferenceInterface.runInference(new String[]{OUTPUT_NODE});//进行模型的推理

inferenceInterface.readNodeFloat(OUTPUT_NODE, outputs);//获取输出数据

然后接下来的主要工作就是安卓项目的编译以及将编译完的apk文件安装到手机,这部分内容与一般的安卓项目没有区别.

(2)系统性能测试.

基于卷积神经网络的手写数字识别APP设计完成且安装到Android设备后,在运行时,利用Android的触屏功能记录轨迹,手写完成后,单击测试按钮,调用模型,进行识别,并输出结果到用户界面.在测试完成后,单击清除按钮,会将绘图区域内生成的手写数字以及识别结果清除.

4实验结果展示

本次实验结果如图5、图6所示,由图5可知,在Android上实现的手写数字识别算法取得了较好的识别效果.图6则是无法正确识别的实例,比如当字符比较小的时候或者字符出现在Bitmap的边缘的时候,识别效果不太理想.

笔者下一步将着重从图像预处理方面改善因字符太小和书写位置偏离中心位置等原因造成手写数字识别度不高的问题.

神经网络论文范文结:

关于神经网络方面的论文题目、论文提纲、神经网络论文开题报告、文献综述、参考文献的相关大学硕士和本科毕业论文。

1、中国学术期刊网络出版总库

2、网络安全论文

3、网络营销论文

4、计算机网络毕业设计

5、网络营销相关论文

6、网络论文