计算机-基于全连接神经网络的 手写数字识别系统的设计与实现

目录

摘要 I

Abstract II

1绪论 1

1.1课题背景及意义 1

1.2手写体数字识别研究的发展及研究现状 1

1.2.1国内现状 1

1.2.2国外现状 2

1.3神经网络在手写数字识别体中的应用 3

1.4基于深度学习的手写数字识别难点 4

1.5主要研究内容 5

1.6拟采用的研究思路 5

1.6.1研究方法 5

1.6.2技术路线 5

1.6.3可行性论证 6

1.7本章小结 6

2神经网络的研究 7

2.1神经网络概述和定义 7

2.2人工神经元 7

2.3前馈神经网络模型 9

2.4神经网络的工作方式与训练算法 11

2.4.1神经网络的学习模式 11

2.5反向传播算法 13

2.6本章小结 15

3全连接神经网络 16

3.1全连接神经网络 16

3.1.1全连接神经网络简介 16

3.1.2全连接神经网络规则 17

3.2感知器 17

3.3关于全连接神经网络的训练 18

3.3.1神经网络训练BP算法 19

3.3.2输出层权重训练 19

3.3.3隐层权重训练 20

3.3.4 DropOut 21

3.5本章小节 21

4开发工具以及环境搭建 22

4.1开发工具 22

4.1.1Python语言 22

4.1.2 界面设计工具 22

4.2开发环境及配置 23

4.2.1Pycharm+Anaconda环境配置 23

4.2.2 PyQt5+QtDesigner配置 24

4.3数据集介绍 26

4.3.1关于mnist数据集测试 28

4.4关于Pytouch简介 28

4.4.1Pytorch优点 29

4.5本章小节 30

5手写数字识别系统的实现 31

5.1构建神经网络模型 31

5.1.1神经网络模型实现过程 31

5.2实现效果 33

5.3本章小结 34

结论 35

参考文献 36

致谢 37

外文原文 38

中文翻译 43


基于全连接神经网络的

手写数字识别系统的设计与实现

摘要

手写体数字图像识别技术是模型识别中一个非常重要且活跃的技术研究领域,其应用范围非常宽泛,应用范围覆盖了邮政编码、银行票据、统计报表,以及各种形式的数据和图像处理服务中[1]。手写图像识别技术是目前模式识别、机器学习等技术发展中一项重要技术热点和关键技术难点,在实际研究中,手写图像识别仍然面临巨大的技术困境和挑战,鉴于目前手写图像识别本身的一些优势和特征,比如阿拉伯数字只有0-9十个样式,数字与书写方式之间的区别相对较大,实时性的要求很高等这些优势。因此,手写式数字识别技术的有效性和快捷度都被普遍认为是近几年来技术研究的方向和重点[2]。

人工神经网络识别技术是近年来广泛应用于该技术研究领域的一种新技术,该技术方法同样也具有其他许多传统技术不可以拥有的优势:良好的易读性、分类能力强、并行处理和自学习能力,并且主要应用于各种离线训练和网络识别。这些特性都使得其在对于手写体或者字符号进行识别时都能够迅速而实时地对大量数据信息进行精确而准确地处理,并且可以达到很好的识别效果[3]。由于手写数字识别技术很难找到准确数学模型,同时又因为全连接的神经网络几乎完全可以拟合任何函数,非线性拟合的能力极强。所以我们在手写式数字识别系统中选择全连接的神经网络来针对问题进行处理[4]。本文模拟主要是采用Mistassini手写式数字语言信息集, python 编程语言, Torch机器学习库, pyqt5图形界面库,实现基于全连接的神经网络的手写数字识别系统。通过测试,本识别系统针对于比较为规范的手写数字进行识别,已经能够达到很好的识别效果。



关键词:手写体数字识别; Pytorch; 全连接神经网络






Based on fully connected neural network

Design and Implementation of Handwritten Digit Recognition System

Abstract

Handwritten digital image recognition technology is a very important and active technical research field in model recognition. Its application range is very wide, covering postal codes, bank notes, statistical reports, and various forms of data and image processing services. Handwritten image recognition technology is an important technical hotspot and key technical difficulty in the current development of pattern recognition, machine learning and other technologies. In actual research, handwritten image recognition still faces huge technical dilemmas and challenges. In view of some of the current handwritten image recognition itself Advantages and characteristics, such as the relatively small amount of information in handwritten image recognition at present, the relatively large difference between numbers and writing methods, and high real-time requirements. Therefore, the effectiveness and speed of handwritten digital recognition technology are generally considered to be the direction and focus of technical research in recent years[8].

Artificial neural network recognition technology is a new technology that has been widely used in the research field of this technology in recent years. This technology method also has advantages that many other traditional technologies cannot have: good legibility, strong classification ability, parallel processing and Self-learning ability, and mainly used in various offline training and network recognition. These characteristics enable it to accurately and accurately process a large amount of data information quickly and in real time when recognizing handwriting or character numbers, and can achieve a good recognition effect. Because handwritten digit recognition technology is difficult to find an accurate mathematical model, and because the fully connected neural network can fit almost any function, the ability of nonlinear fitting is extremely strong[9]. So we choose a fully connected neural network in the handwritten digital recognition system to deal with the problem. The simulation in this paper mainly uses minist handwritten digital language information set, python programming language, Torch machine learning library, pyqt5 graphical interface library, to realize a set of handwritten digital recognition system based on fully connected neural network and other algorithms. Through testing, this recognition system is aimed at the more standardized handwritten digits, and it has been able to achieve good recognition results[10].


Keywords: Handwritten Digit Recognition; Pytorch; Fully Connected Neural Network

















1绪论

1.1课题背景及意义

近年来手写数字识别技术已发展成为我国科学界学术研究的一个重要热点,既有广阔的实际应用还具有很好的发展前景,同时也是十分重要具有重大性和挑战性的研究课题。人工神经网络技术作为当今时代我国人工智能技术中最活跃的重要分支之一,它所具有的并行计算、容错能力、泛化和优先级的控制能力,以及我们可以任意一种高和低精度方式地进行逼近和复杂的控制未知非线性对象物体和未知对象的控制功能等这些特点,使其可以成为手写数字识别技术的基础,它为我们实现手写体数字识别提供了一种新的技术方式和解决方案。

手写体数字识别技术是模式识别一个非常重要和活跃的基础科研和科技领域,数字字符识别技术并不仅仅是一项独特而且孤立的数字科学基础技术,它所有需要同时解决和涉及的各种技术问题在模式识别的其他方面和实践中都是我们无法完全回避的;在字符识别技术的应用领域方面,字符识别技术作为一种新型数字信息处理技术,在当前已经十分普遍,但却仍然依旧存在着广阔的应用背景与巨大的市场发展需求。因此,对于各种数字识别方法的应用研究在基础理论与实践中具有双重研究价值[5]。

人工神经网络识别技术是近年来广泛应用于这一科学技术领域的一种全新方法,该技术同时也具有其他许多传统科学技术未拥有的特殊优势:良好的容错性能、分类和处理功能强、并行数据处理和自学习功能,并可以广泛应用于对离线的训练和进行现场识别。这些特点使得它们可以在对手写式数字符号进行识别中对大批量数据信息实现迅速而实时地进行信息采集。并可以达到很好的识别效果。

1.2手写体数字识别研究的发展及研究现状

1.2.1国内现状

手写体数字识别技术由于具有广阔的市场前景巨大应用价值,此系统的开发是一个具有重大科学研究价值的技术课题。随着神经网络和模糊逻辑技术的进步和发展,在这一技术的研究中采用了很多新的技术方法和手段,使这一古老的科技学科焕发出新的活力。二十多年来,人们在数字识别技术领域进行了大量的探索和研究工作,所开发出的各类识别方法现在应用于印刷体和手写式印刷体的数字识别技术等方面都已经取得了良好的效果,识别率基本保持稳定在96%左右。但是自由式手写体数字的辨认与识别技术工作目前还不成熟,依然被认为是当前文字辨认中最具有挑战性的研究课题[6]。

我国从上世纪九十年代发展以来,人工神经网络(ANN)这一科学技术在当今世界范围内应用发展得已经十分迅速,它已经具有同时模拟各种人类部分形象思维的能力,是一种模仿人类大脑语言学习、记忆、推理等各种人体认知处理功能的新一代技术和科学方法。尤其重要的一点是它不仅具备了信息化的并行式和分布式的数据处理分析能力以及自学习处理功能等显著的技术优点,更是立刻引起了当时社会人们对其的极高关注兴趣。人工神经网络就是由一些简单的或者类似于人脑神经元的信息处理功能单位相互之间联系或者连接一起构造而来形成的一个复杂神经网络。目前已经涌现了许多不同的学习类型的算法,其中BP网络及其他各种学习技术算法已经成功得到了广泛的学术关注和深入性的研究,并且在促进数字识别技术应用方面已经成功取得了非常多的且具有重要学术意义的研究应用。

1.2.2国外现状

手写体数字识别技术是一项极具科学研究价值的技术课题,随着神经网络和模糊逻辑等技术的进步和发展,人们对该技术的研究采用了许多新的技术方法和手段,也才能够使这一古老的技术课题重新焕发出新的活力。二十多年来,人们在数字识别技术领域进行了大量的探索和研究工作,所开发出的各类识别方法现在应用于印刷体和手写式印刷体的数字识别技术等方面都已经取得了良好的效果,识别率基本保持稳定在96%左右。但是自由式手写体数字的辨认与识别技术工作目前还不成熟,依然被认为是当前文字辨认中最具有挑战性的研究课题[6]。

光学字符识别(OCR)是软计算研究的一个广泛领域,人工智能(AI)、模式识别(PR)和计算机视觉。OCR是一般手写文本或打印图片数字化的技术,使他们能够以电子方式更高效、更正确地修改、存储和搜索。而研究几十年和在这个区域,机器仍然远未达到人类的分析能力。OCR方法的目标是在困难中识别手稿(与人类相同)品。OCR方法主要分为两种类型,第一类是在线文本识别和第二个离线文本识别。离线OCR考虑在两个子类别中首先键入文本和第二个是手写文本,在在线文本识别中,单词和字符在运行时会尽快被识别书面的,因此,有时间信息。在线方法获得的位置笔作为时间的函数直接从界面。这通常是通过笔为基础的在电子平板电脑上用单支笔书写的某处。动态知识,这通常是可用于在线文本识别,是总笔画,一组笔画,笔画的方法,以及每次笔画中写作的速度。这些珍贵的信息有助于对文章的识别,并经常指导,以提高执行方法对比离线识别。在线光学识别的几个应用在PTA、平板电脑和智能手机。在线识别方法在离线方法上的好处是交互性,接受作者数字化(反之亦然),可用的时间信息和较少的倾向噪声。缺点是整篇文章无法处理,然后,信息需要动态处理、。离线文本识别方法处理文章的静态表示。识别离线文本分为两个子类别的类型和手写文章。在这两个子类别,从扫描仪或相机获得的文章的图像被处理。显然,由于手写风格的变化和笔迹的无基准性质,问题离线手写识别是OCR中的主要复杂程度,通常需要语言特定技术。另一方面,键入文章的OCR是非常多的对历史文章分析、官方说明和文章等实际应用的需处理和车牌识别。英文字母表的键入文档的OCR具有成为模式识别(PR)和人工智能(AI)。在国外目前几乎所有在这方面的研究都是与极其复杂的文章,嘈杂和扭曲的文章。

1.3神经网络在手写数字识别体中的应用

[if !supportLists]1、[endif]可用于教育行业,批量批改作业

手写数字识别系统被广泛应用在教育行业,通过机器扫描后可将试卷、作业等转化成电子文档,然后通过数字识别系统识别出试卷的内容,进行分数累积、内容判断等操作,极大减轻了教师和学校负担,提高教师的工作效率,手写数字识别系统对于教育事业的发展具有重要意义。

2、手写数字识别技术在财政、税务、金融等各个领域的应用

其中财务、税收、金融业就是手写语音识中最具有发展希望的三个领域。随着近年来由于我国企业市场经济的快速发展进步和不断发展,越来越多的使用企业财务会计报表、税收财务报表、支票、交易单等。如果它们都能被一台电脑用来进行完全自动化的分析处理,无疑将为许多企业节约大量的人力资源、金钱以及大量劳动力。与上述的企业统计分析报表信息处理系统技术应用相比,该处理技术在实际应用中发展难度较大。因为,对各种鉴定表格结果的处理准确性必须有很高的技术要求;能够处理的鉴定表格至少能够达到不止一种,一个鉴定系统本身就已经应该必须能够很好地实现智能化并且同时能够处理若干种鉴定表格;由于各种图像识别处理必须始终贯穿于整个日常的书写工作之中,书写工作过程中人员应尽量按照一般的书写习惯(包括例如:不对所有书写工作人员的写法方式做出任何大的限定,书写时只需要允许人员使用连续的字符串,而不是在固定的读物文本或者方格内直接进行图像书写),以便于将图像识别及其以图像预处理算法为技术核心的并改进诸如heart等的算法。

3、手写识别在邮件分拣中的应用

虽然随着现代社会人们物质和精神水平的提高,经济和社会活动也在不断增长,现在邮件已经不怎么使用,但是也还没有完全取消。在互联网还没有发速发展之前,人们大多通过邮件来进行信息传递,中心邮局每日需要处理巨大数量的邮件。随着网络发展,技术能力的不断提升,邮件自动分拣、自动识别已成为重要发展趋势。自动化寄政邮件的编码分类中,手写条码识别(OCR通常与条码光学类和条码手写识别(bro-predicating)密切关联相关,人工智能辅助手写识别和其他信息技术手段有机地紧密结合在一起来,完成了邮件信息的自动读取。目前邮局及各大快递公司均在使用手写数字识别系统配合邮件分发,大大提高了工作效率。

1.4基于深度学习的手写数字识别难点

我们一般会使用识别效率和识别速度判断各种手写数字辨认方法的优劣好坏,除了这些影响因素,还应当考虑其他方面的问题,比如价格、可靠度、实际实用性等多方面因素。对于手写数字识别方法的判别标准,目前还没有建立一个相对严谨的判别方式。针对已有测验结果显示,手写式数字的正确辨认率较低。主要理由有以下几点:

1、阿拉伯数字虽然只有10个,形式笔画结构较为单一,与英语汉语等语言识别相比比较简单。但是阿拉伯数字手写时书写出来的样式缺差别很大,不同的人、不同的书写方式导致手写数字风格多变,又由于阿拉伯数字在当今全世界范围应用广泛,各个国和地区都已经开始拥有自己独特的书写数字方式和使用习惯,由于各个地区的风格不同,这使得我们开发设计基于深度学习的全连接神经网络系统对于识别准确率方面难度增加。

2、在实际生活中,正确地识别和掌握数字比对识别一般的文字具有更高的技术要求,精准地识别和掌握文字比对精准地识别具有更高技术水平的文字具有要求。这主要是因为数字具有丰富的上下文语境,而且数字之间没有任何语境的关联,而且数据中的每一位数字都至关重要。在某些行业和领域,比如财务、科学技术等方面,其中某一个数字辨认或者错误很有可能给人们带来很多损失,所以我们对于数字辨认技术要求的分析准确度极高也就越来越严格。

3、系统的使用不单单局限于界面的整洁和界面易用程度,还要求手写数字识别系统具有较高的识别率,较快的输入速度,同时还需要处理各个领域大量的数字信息。通常情况下,高精度和低速的识别技术相互冲突,因此就有必要针对如何提升同时增强数字识别的精度、准确性和高效率做出更多的研究和努力。综上,迄今为止尽管国内专家学者外在从事脱机式手写数字识别这个技术的方向已经取得了一些研究成果,但还是仍然遇到许多现实中的问题,亟待我们进行深入探索和解决。

1.5主要研究内容

本手写数字识别系统主要是解决用于以图象格式存在的手写体识别的问题。系统的整体可以划分为三个组成部分,第一是基于神经网络的模型设计,第部分则是基于图形界面设计,第三部分则是基于minist 的手写数据集对于神经网络的模型进行了训练,并实现手写数字识别。

1、神经网络模型设计

根据任务类型,图片大小,对神经网络模型进行结构设计,以求实现最优配置。需要设计的有,网络结构,输入输出,以及网络参数等等。

2、图形界面设计

本项目拟使用图形界面对基于神经网络对手写数字识别任务进行可视化操作,包括超参数设置,开始训练,训练过程输出,选择图片,针对所选图片进行识别,输出识别结果等等。

3、基于神经网络对手写数字进行识别

通过图形界面,基于MINIST数据集中对训练集对设计好的神经网络进行训练,并将训练好的模型保存下来。然后,在图形界面中选择一张手写数字图片,并使用训练好的模型对图片进行识别,并将识别结果输出至可视化界面。

1.6拟采用的研究思路

1.6.1研究方法

拟采用MINIST手写数字数据集,Python语言,Pytorch机器学习库,PyQt5图形界面库,基于全连接神经网络算法实现手写数字识别。

1.6.2技术路线

此次研究中使用28*28的 minist 数据集中的手写数字图像,在样本图像中,有数字的像素点设为为1,没数字的像素点设为0,即可把这个图像转换成784位的二维数码向量。然后,设计全连接神经网络,网络共五层,输入层共有784个节点,对应于图像的784个输入值,对应于输出层10个节点,对应预测为0-9个数字的每个数字的可能概率值。最后,设计了一个基于手写数字特征识别系统图形界面,在这个图形界面中我们不仅可以针对这些神经网络进行学习训练时所有的需要使用的各种参数软件进行计算设置,如训练的进行次数,学习效果,每批次处理样本的个数,并可以在可视化界面中对神经网络模型进行训练,在训练完成后将训练好的模型保存起来。在界面中可以随机从测试集中选择一张数字手写图片,然后使用已经训练好的模型对该图片进行识别,并在界面中显示识别结果。

1.6.3可行性论证

全连接神经网络已经是比较成熟的图像分类算法了,MINIST手写数字集也是计算机视觉中的入门数据集,基于全连接神经网络对MINIST手写数字数据集进行手写数字识别,运算速度快,准确率高,无论在理论上还是实践中都是十分可行的。

1.7本章小结

本章主要内容是详细介绍了当前手写数字识别相关技术的主要研究发展背景与现实的技术需求,研究课题内容的具体技术相关性研究进展与其未来发展的技术目前仍然存在的一些技术问题与重大技术难点。最后简要详细阐述了该本论文的相关科学技术研究发展思路和其中的主要内容。





















2神经网络的研究

2.1神经网络概述和定义

人工智能先驱们最初的设想是复制人脑的功能,人脑是自然界己知最聪明,最复杂的创造物。这也是这个领域的大多数术语(包括术语“人工智能”)都来自于人的身体和心灵的缘由。人工神经网络的灵感来自于它的生物对应物。脑的许多功能上的实现存在许多没有解决的疑问,但我知道的是生物神经网络使大脑可以以复杂的方式处理大量的信息。生物神经网络由大约1000亿个神经元组成,神经元是大脑的基本处理单元。神经元通过大量相互连接(称为突触)来发挥其功能。人脑大约有100万亿个神经元,每个神经元大约有1000个。人工神经网络(ANN)或模拟神经网络(SNN)是机器学习的一个子集,也是深度学习算法的核心。人工神经网络(ANN)由一个节点层组成,节点层包括一个输入层,一个或多个隐藏层和一个输出层。每个节点都连接到另一个节点,并具有关联的权重和阈值。如果任何单个节点的输出超过指定的阈值,则该节点将被激活以向网络的下一层发送数据。否则,数据将不会传输到网络的下一层。

人工神经网络最初会经历一个训练阶段,在该阶段中,它将学会从视觉,听觉或文本方面识别数据中的模式。在此监督阶段,网络将其实际产生的输出与期望产生的实际输出(期望的输出)进行比较。两种结果之间的差异可通过反向传播进行调整。这意味着网络将向后工作,从输出单元到输入单元,以调整其在单元之间的连接权重,直到实际结果与期望结果之间的差值产生最小的可能误差为止。

2.2人工神经元

人工神经网络模型是一种最早起源于人脑神经系统的新型网络模型,是用于研究和发展模拟应用人工智能的这种一条非常重要的技术途径,具有用于模拟人的一些部分思维形象和整体思维的一种技术表现能力它主要原理是由简单的各个信息处理器和针对网络(即人工神经元)之间进行信息互联连接组成的一种信息网络,能够很好地进行接受和分析处理各种信息,网络的基础数据和针对信息处理由各个信息处理器和针对网络中各个处理单元之间的相互作用进行关系一起来进行控制和辅助实现,它主要目的是通过把能够解决这个问题的各种方法间的信息链路通过连接进行权限化来进行信息处理。一般而言,人工神经网络主要的定义方法泛指以其自身作为一种新型的局部信息处理系统或者子单元的技术基础而被广泛地用来对其进行模仿或者建立模拟人体和其他人的大脑,执行特定功能任务或者用来完成对其特定功能感兴趣的特定事件等各种功能,它们所需要采用的神经网络就是一种几乎可以相互并行的分布式局部信息处理的网络架构,通过一种被人们称之为信息链接的单向局部信号处理通路把一些被信息处理的单与其他进行的信息互联而相互地组成。每一个微处理器网络单位的都包括一个不同但输出到所有人预期的网络连接。每个信号处理器控制单位各自分别向传送相同的信号进行处理,每个处理单元各自分别发送一个相应的处理信号。其基本模型如下图2-1所示。


图2-1人工神经元模型图

根据不同神经元在内部神经网络中的位置和功能的区别,能将其分为三种类型:输入输出神经元,输入神经元和输出隐含网络神经元。输入神经元主要接收外部网络信息,输出隐含神经元将信息传递给外部网络。这两类外部神经元是内外环境直接交换内部信息的重要通道,是外部神经元的重要构成部分。然而,这些隐藏的外部神经元主要存在于外部神经网的内部,与外部环境没有任何直接的相互作用。这些隐层神经元只接受其他神经元的输出作为其他输入,输出仅用于控制隐层神经网络系统中的其他神经元。这三类神经元相互连接,形成一个结构和功能完整的网络,这种神经元具有如下几个功能特点:

[if !supportLists](1)[endif]神经元是一个有多个输入和一个输出的单元;

[if !supportLists](2)[endif]它具有非线性的输入输出特性;

[if !supportLists](3)[endif]它具有可塑性,其可塑性的主要部分是权重的变化,相当于生物神经元突触部分的变化;

[if !supportLists](4)[endif]神经元的输出反应是各种输入值共同作用的结果;

[if !supportLists](5)[endif]输入类型分为激励(正)输出和抑制(负)输出。

虽然单个神经元的结构极其简单,功能有限,但由大量神经元组成的网络行为功能非常庞大,可实现非常多长人无法办到的事情。用数学表达式对神经元进行抽象和概括,令

表示t时刻神经元j接受的来自神经元i的信息输入,

表示t+1时刻神经元j的信息输出,则神经元j的状态表达式为:

(公式2-1)

其中,

表示神经元的阈值,

表示神经元i到j的权重值,f(o)表示神经元转移函数。有一点需要说明的是,上式是为了简单起见,将突触时延取为单位时间。

输入总和常称为神经元在t时刻的净输入,用下式表示:

为了简单起见,在后面用到上式时,常将其中的(t)省略。如果令

,则有:



因此净输入与國值之差可表达为:

(公式2-2)

综上,神经元模型可简化为:

2.3前馈神经网络模型

将上述几个结构数量庞大且结构功能单一的典型神经元分别采用特定的典型拓扑网络结构方式进行相互连接,便于就可以得出组成这类神经网络的基本模型。图3-2是一个简洁的动态神经网架构模型,该模型主要采用前馈动态神经网。前馈输入神经网络控制系统技术是最早由临床研究工作人员和临床学者们首次深入设计的并开发实现出来的,构造相对简单。前馈神经网络是一种生物学启发的分类算法。它由(可能很大)许多简单的类神经元处理单元组成,这些处理单元分层组织。一层中的每个单元都与上一层中的所有单元相连。这些连接并不完全相同:每个连接可能具有不同的强度或重量。这些连接上的权重编码了网络知识。通常,神经网络中的单位也称为节点。数据进入输入并逐层通过网络,直到到达输出。在正常操作期间(即当它用作分类器时),层之间没有反馈。这就是为什么它们被称为前馈神经网络。


图2-2 简单神经网络模型

图3-2中,左侧一竖排单元节点

和偏置(图中标记为+1的圆圈)组成神经网络的输入层,右侧一竖排的单元节点是输出层(这里只有一个节点),中间一竖排的全部单元节点是隐含层,隐含层顾名思义是隐藏在输入和输出之间的,我们不能通过训练的数据样本去了解它的构造和取值。

如果n代表神经网络模型层的数目,

表示第

层,

分别代表权重和偏置,这样上图3-2的前馈神经网络模型里

,

是输入层,

是隐藏层,

对应表示为输出层,

代表第输入信号层的第

个单元和第

输入信号层的第

个单元两者构成的权重参数,

是第层的第i个单元的偏置参数。将

代表第l层里第i个神经元输出值(f(.)的激活值)。当l=1时,

表示第i个输入特征

。在参数样本集合W,b确定的情况下,我们就能够通过上述算法利用非线性模型

计算整个神经网络的输出,计算每层输出结果的详细步骤见下式:

(公式2-3)

为了方便简洁,用

代表第l层里第i个单元的输入加权之和,当l=2,,则。如此公式可以更简洁地表示为:

上述的信号计算处理步骤即为基于神经网络前向信号传播的计算过程,其主要计算目的之一的也便是通过前向传播网络信号的计算方式一层层不断地精确计算出所得到的被激活的网络输出信号值。神经网络结构模型的多种结构性,我们可以通过对不同的隐含层结构进行不断增加或者进行修改等多种方式对其中的结构类型进行多重次的变更,以求我们能够有效地将其应用于不同的实际情况,全连接神经网络模型正是由此方式构建而来形成。

2.4神经网络的工作方式与训练算法

2.4.1神经网络的学习模式

神经网络从实际上来说就是一种人类可以直接模仿那些人类处在自然界环境中的正常生物神经系统的一种逻辑运算网络模型,通过训练和科学研究以及使用那些没有任何逻辑思维的人类电子脑和计算机等科学技术人和工具都已经可以直接进行电脑仿真利用生物的正常脑部结构去快速分析和准确识别这些信息。整个人体网络在我们进行人体建模的设计过程中所有的需要同时涉及使用到的网络计算机数量非常巨大,需要我们自己可以通过各种反复的学习训练或者学习不断地进行调整和重新修正整个网络设计模型的各个基本参数,并且通过这样一种完全具有合理自适应性的"学习"与"训练"结合过程,从而最终使得整个网络对于各类人体内部信息能够进行"记忆",最终把利用人类身体信息真实"输入一输出"之间的适应关系最终确定在合理性和误差大的区间内,即被人们认为已经完全基本具备了利用人类信息身体对于自然环境的合理适应性。目前基于人类神经网络的监督学习控制形态主要可以分为3种:分别称为是无公有私的监督学习、无监督学习以及再励学习。

(1)有监督学习

监督学习,也称为监督机器学习,是机器学习和人工智能的子类别。它的定义是使用标记的数据集来训练算法,以分类数据或准确预测结果。输入数据输入模型时,它会调整其重量,直到模型得到适当安装,这作为交叉验证过程的一部分发生。监督学习可帮助组织大规模解决各种实际问题,例如将垃圾邮件从收件箱中单独的文件夹中分类,具体学习方式如图3-3所示。

在单一的网络训练中决定学习结果过程中,通过"监督"将实际学习输出的计算结果和上次理想学习输出的计算结果之间的计算误差分别综合进行了定量分析和综合评判,再通过判决结果得出该次的学习是否需要我们继续进行下一次的网络学习。同时根据网络误差权值函数模型来合理调整各种类型网络性能模型设计中的网络权值计算参数,尽可能把网络误差权值函数尽量减少或降到最低,直至能够满足设定目标的网络性能指标。


图2-3 有监督学习

(2)无监督学习

例子结果如图3-4所示,无监督机器学习比有监督学习更智能,它依赖于神经网络本身。整个网络能直接获取误差信号进行校准和修正。它依靠输入的全部信息,通过自己的模型构建和训练过程,对网络参数和结构进行更新和修正,最终使网络的输入一输出关系与原来的功能一致。


图2-4 无监督学习

(3)再励学习

再励学习这种模式通常指的是在前2种学习之间的模式,它又可以简单地统称为重新加强学习。不需要完全依赖于神经网络而是通过外部环境的影响来对其进行训练,针对这次训练中所有输入和结果做出一个确定性的判断只是做出了一个与其相关性评价数据。若本次测试结果良好,就有机会对这些神经网络做出一些惩罚性的行为,以此来鼓励和支持这些神经网络继续优化自己的系统性能。再励学习过程如图2-5所示。


图2-5 再激励学习

本文研究的是全连接神经网络,将使用前向传播方式对手写数字识别模型进行训练,是一种有监督的学习方式。

2.5反向传播算法

神经网络的基本模型目前可以用的划分可认为很多种,现在最有效的网络模型主要包括有abpld网络、hopfieldld网路、波尔兹曼机制的boltzmann、sofm及zmartld网路等等。在以上这些各种网络传播模型中,逆向训练传播(backpropagation,bp)模式是一种网络使用率和工作效度均最好的网络训练传播算法。反向信号传播编码算法的主要技术优势之处之一就是它的操作原理简单、操作量不小、计算机和方法稳定等,十分适用于进行图像信号处理和视频信号的信息分类化和辨认。

反向传播权值算法基于应用梯度下降准则,通过将权值代价计算函数(实际权值输出与期望权值输入的均方差与误差)在权值曲面上沿应用梯度上升下降准则寻找最小值的下降方向,并且不断地对各个神经网络各层的所有权值数据参数结果进行重新调整与及时修正,不断地重新替换与及时更新各个神经网络的权值参数最终结果可以有效实现神经信息源的识别。它也可能就是目前最为普遍的几种有限度控制能力训练方法手段之一及其中的习得训练模式。

假设我们有一固定的样本集..,样本数为m。每一个样本中的X参数表示n维向量,Y表示离散值。通过在神经网的实际输出和期望输出间做一个均方误差。这种误差也称为网络的损失成本函数。整个反向传播计算的目标是尽量减少损失成本,即使是在函数值。这样,训练好的网能准地预测未知输入短信的输出。对于单个样本,损失函数如下所示。

(公式2-4)

这里为一个样本数据,表示神经网络的权重和偏置等参数,||C||表示常取二范数。针对前文给出的有m个样本的集合,它的整个损失代价函数表示如下:

(公式2-5)

表达式中有两项。前者表示所有样本集的期望和实际输出误差的均值,后者表示神经网权值的衰减项。在网络模型中人为地提高了对各权值幅值的约束,预防了训练网络的过拟合。算法的目标是最小化代价函数的值,这样第一步就是要把网络所有涉及的权重与偏置等参数在最初阶段初始化成一个无限逼近于0的随机值,之后采用梯度下降法调整优化上述参数。梯度下降算法对权重和偏置项的修正调整分别见下式。


(公式2-6)

上式的α代表了网络的训练学习速率,可根据真实原因进行调整。整个计算的核心是怎么算代价函数对权重和偏差参数的偏导数,也称残差。

对于一个样本,首先求出其代价函数对权重与偏置项的偏导数,再对整个样本的代价函数的偏导数进行求解,过程用下式表示:

(公式2-7)

单独样本的代价函数对权重W和偏置项b的偏导被算出之后,我们便能计算得到整体网络的代价函数。

(公式2-8)


最后,把(3-14)与(3-15)得出的结果带进(3-6)与(3-7)两式,不断选代更新修正权重与偏置项b这两个参数,让整体网络的代价函数尽可能的小,最终两个参数的波动会逐渐趋于0,这时就可以停止反向传播算法的训练.

2.6本章小结

本章节主要是对神经网络进行介绍。具体内容包括神经网络的由来、神经元等相关概念。研究了神经网络的工作模式,确定并推导了前向传播、后向传染和梯度下降算法。本文分析了多种神经网络模式,提出来了基于全连通神经网络的手写体数字识别的研究设计框架和方案。














3全连接神经网络

基于全连接神经网络的手写式数字识别系统在模型中进行了设计和实现,通过构建合适的全连接神经网络模型,来分析各种手写式的数字。多层全连接的神经网络在技术上具有很强的自我学习能力和超高的非线性模型拟合能力,面对一个大样本的数据时也具有很强的推理能力,可以充分地逼近任意复杂的非线性关系。为此,提出来了一种基于全连接神经网络的手写体数字识别系统。利用全连接神经网络对手写体数字进行识别。本节主要简介全连通神经网的结构定义等以及介绍全连接神经网络的训练过程。

3.1全连接神经网络

3.1.1全连接神经网络简介

全连接神经网络(dnn)网络是最朴素的一种神经网络,它具有最高的网络路径控制参数和最大的计算机容量。全连接神经网络的基本模型结构是不固定的。一般来说,它包括三层:输入输出层,隐藏层和输出层。一个完整的全连通神经网基本模型只包含一个输入层和一个输出层,而且往往包含多个隐层,全连通神经网系统能自动实现任意类的类和拟组合,并且具有极强的非线性类和拟组合性。同时实践说明深而窄的全连接神经网络更节约资源。因为网络是全连接,所以会有网络过参数化的问题,使得全连接神经网络在训练时需要大量的数据,训练好一个深层网络需要丰富的网络调参经验。图3.1为一个四层的全连接神经网络,第一层分别为输入层,第二层和第三层为隐含层,第四层分别为输出层,相邻于这两层之间,上一层的输出输入信号被直接称为下一层的终端节点,每个层的输入都应该包括输出权值,偏置和激励函数三个组成部分。


图3-1四层全连接神经网络

3.1.2全连接神经网络规则

将每个神经元根据组织层次不同进行合理布局。最左边的层我们叫做数据输入层,负责直接传送和管理接收我们输入的信息数据;最右边的那个层被我们称为输出层,我们也就是从这层中直接进行获取接收到由上层神经网络直接传递的输出数据信息。输入层与输出层之间之间的被称作隐藏层,因为它们在外部环境是不能肉眼看到的。在同一个神经层次上的两个神经元之间并非毫无连通。第n层的各个连通神经元与第n-1层的全部各个神经元可以进行双向连通(这也就可说是full connected),第n和n-1层各个神经元的连通输入即为第n和n-1层神经元的连通输入。并且各个连接也只有一个连接权值。

3.2感知器

DDNN也可以叫做多层感知器(MLP),DNN的网络结构太复杂,神经元数量太多,为了方便讲解我们设计一个最简单的DNN网络结构--感知机。



图 3-2 感知器

DNN中的神经元由五部分组成:

输入:一个感知器可以接收多个输(x1,x2,...,xn|xi∈R)

权重:每一个输入都有一个权重

∈R

偏置项:b∈R,就是上图中的

激活函数:也叫做非线性单元,神经网络的激活函数有很多。下文会做相关介绍。

输出:

3.3关于全连接神经网络的训练

神经网络的复杂之处在于其的组成结构太复杂,神经元太多,通过设计一个最简单的神经网络来对全连接神经网络进行详尽的介绍。


图3-3全连接网络图

这是一个只有两层的神经网络,假定输入x,我们规定隐层h和输出层O这两层都是

组合,一旦输入样本x和标签y之后,模型就开始训练了。那么我们的问题就变成了求隐层的w、b和输出层的w、b四个参数的过程。

训练的目的是神经网络的输出和真实数据的输出"一样",但是在"一样"之前,模型输出和真实数据都是存在一定的差异,我们把这个"差异"作这样的一个参数e代表误差的意思,那么模型输出加上误差之后就等于真实标签了,作:

当我们有n对x和y那么就有n个误差e,我们试着把n个误差e都加起来表示一个误差总量,为了不让残差正负抵消我们取平方或者取绝对值,本文取平方。这种误差我们称为“残差”,也就是模型的输出的结果和真实结果之间的差值。损失函数Loss还有一种称呼叫做“代价函数Cost”,残差表达式如下:

(公式3-1)

现在我们要做的就是找到一个比较好的w和b,使得整个Loss尽可能的小,越小说明我们训练出来的模型越好。

3.3.1神经网络训练BP算法

对于上述的全连接神经网络,需要特殊的训练方法。在这时间,怎么找最合适的连接权值对每一个神经元数据集进行分类?反向传播算法(Back,Propagation)提供了一个解决方案。本文着重讲解BP算法,思路也是梯度下降算法。本文定义损失函数,并通过向损失函数下降最快的方向移动(即梯度方向)来调整我们的权重系数。损失函数能帮助均方误差:

(公式3-2)

接下来的问题就是求损失函数E对需要训练的权重系数的梯度

3.3.2输出层权重训练

首先从隐层至输出层的连接权重为例进行推导。这个求梯度的过程就是链式求导法则,首先我们分析ー下是如何影响到我们的损失函数E的,首先影响了第 j个输出层神经元的输入值,然后进而通过激励函数Sigmoid 影响到其输出值,然后影响到E。

这个求导过程为:

(公式3-3)

我们分别来分析这三项:

第一项:将上面E的表达式代入

第二项:这一项是神经元输出对输入求导,实际上就是Sigmoid求导:

第三项:这一项是神经元的输入对权重求导,实际上就等于上一个神经元的值

所以根据梯度下降规则更新权重过程为:

上式中的

我们定义为:

3.3.3隐层权重训练


隐层神经元权系数

首先影响

神经元的输入

,进而影响输出。

(公式3-4)

到现在为止,我们能在输出层计算到权重系数的损失函数梯度,在隐藏层怎么算到权重系数的损失函数梯度,然后根据梯度下降算法来训练我们的网络结构。bp神经网络训练过程的主要特征:训练过程实际上是一个反复学习的过程,根据预测的预期输出和实际测定误差进行反复调整。随着调节过程的反复进行,实际输出逐渐接近预测值。对于bp网络,在收敛过程中主要存在两个缺陷:收敛效率不高,容易陷入局部最优的理解。虽然很多学者提出了多种方法来解决这些问题,如共轭梯度法自适应学习,遗传算法自适应学习等方法,但以上两种方法都可以在一定程度上加以改进,以解决bp神经网络收敛的缺陷。

3.3.4 DropOut

DropOut是深度学习中常用的方法,主要是为了克服过拟合的现象。全连接网络极高的 VC 维,使得它的记忆能力非常强,甚至把一下无关紧要的细枝末节都记住,一方面使上网参数过大,另一方面训练后的模型容易过拟合。

dropout:这就是本意指在一轮的训练结束阶段暂时关闭一部分的训练网络节点。使得那些被关闭了的那个节点可以进行一个相当程度的去除。如下面框图所示,去掉了两个虚线的一条圆和两个虚线,原则上我们就是去除了的两个神经元是随机的.


图3-4 DropOut图

3.5本章小节

本章对神经网络、神经元、以及全连接神经网络进行的详尽的介绍,为我们日后基于全连接神经网络的构建做好了基础。











4开发工具以及环境搭建

4.1开发工具

4.1.1Python语言

python语言是abc编程语言的继承。python不仅在技术上具有良好的开放性,而且拥有独特的图形界面而文本识别功能也是实现本地窗口设计风格的手写数字识别,以及python编程语言中pl工具提供的强大数字识别功能。创建图像处理功能是为了方便以各种方式处理数字图像信号,例如放大和缩小。通过这种编程语言通过使用和学习,我们已经在一个良好的环境中进行了接口调用,然后实现了与接口的对接,从而应用到实际的手写数字中正在进行识别。

在十种中最成熟、开源的面向对象深度学习框架中至少有6种算法支持python语言,目前已有许多算法在深度学习算法完全基于这一研究和生产框架。与普通的面向对象的深度学习语言相比,它易于学习和管理解决方案。对于人工智能,这个编程语言可以说是一个很好的计算机编程语言,在我们完成了底层的驱动和人工智能体系移植之后,借助于机器学习的算法,将自己编写的语言研究和开发运用到这上面,这样就使得我们可以充分利用 Python的特点来发挥人工智能算法和机器学习的两大优点。本手写数字识别系统是在Windows系统下实现,采用的是Python3。

4.1.2 界面设计工具

关于本手写识别系统拟采用Qt作为接口进行界面设计。Qt是一个新型的全球跨行业平台通用c++图形软件用户界面数据库,由一家挪威trolltech公司自主开发和设计制造,目前主要开发产品分别有Qtcreator,Qtembedded,Qtdesigner快捷应用开发工具,Qtlinguister国际化开发工具等部分组成。

Qt支持所有的linux/unix操作系统,还可以在windowsv等平台上免费使用。为了能够提供功能给正在应用程序中的开发人员想要构建一个艺术作品等级的图形用户界面必须还需要考虑具备的所有重要功能。Qt很容易被用来扩展,并且它们可以用来让我们真正容易进行新的组件结构编程。Qt与gtk、kde、mfc、owl、vcl、atl都是同一个基于图形软件接口和用户界面的典型数据库。同时它还具有一个软件可以同时支持2d/3d的动态图形文件渲染,支持opengl、大量支持开发者的文件、xml文件支持等等但功能优点。

4.2开发环境及配置

4.2.1Pycharm+Anaconda环境配置

本手写数字识别系采用Pycharm+Anaconda开发工具具体环境配置如下。

1、下载pycharmIDE后,在PyCharm中新建一个project后,该项目的默认编译器应该是系统默认的Python.exe。为了选择特定的编译环境,我们需要个性化设置。

2、点击菜单栏中的File,打开Settings。在Project选项卡中选择ProjectInterpreter如图4-1所示。


图4-1 Anaconda环境配置

3、在右侧ProjectInterpreter中选择你在Anaconda中新建的Python环境。因为我这边是新建了环境,因此选择Existingenvironment。具体的路径为Anaconda3文件夹中envs中你所新建的环境文件中的Python.exe,如下图4-2所示,其PytorchNLP是新建的环境名。


图4-2 Anaconda环境配置

4、到这里我们已经为当前的project选择了一个特定的Python编译器了。接下来还有一项重要的步骤就是选择该project要加载包文件的路径。如果不进行这一步,那该project还是从系统环境变量中的路径来搜索你要加载的包,这样在你用Anaconda新建的这个环境中所特有的包就会出现无法加载的问题。单击菜单栏Run选择EditConfiguration。在Environmentvariables中添加一个新的Path。新的路径为你用Anaconda新建的环境的文件夹中的…/Library/bin文件夹,如图4-3所示。


图4-3 Anaconda环境配置



图4-4 Anaconda环境配置

5、选择保存,写段代码开始测试你的环境是否配置成功。

4.2.2 PyQt5+QtDesigner配置

为实现手写数字识别系统的界面设计使用PyQt5+QtDesigner配置以便进行UI界面设计。配置过程如下:

1、首先我们需要打开一个anaconda,下载后打开environment->notinstalled然后搜索一个pyQt,会在这个屏幕上自动看到一个pyQt的安装文件包,直接打开点击安装勾选之后右下角我的apply就已经自动安装好了。安装生成完毕后它还能够自动切换至ssinstalled,来自动检测软件是否可以实现真正的软件安装成功。

2、安装好pyQt5之后,可以在一个anaconda-<bin的文件目录下直接可以看到Qtdesigner.exe,这个文件目录下也就是我们通常用来进行绘制软件界面的pyQtdesigner。

3、打开PyCharm,打开File—>Settings—>ExternalTools,点击加号来添加自己的工具,做如下配置:

Name:QtDesigner

Group:Qt

Workingdirectory:$ProjectFileDir$


图4-5 QtDesigner配置

完成后点" ok ",现在 Qtdesigner就已经被配置好了,就已经可以直接在 pycharm 中重新打开它们一起来绘制界面了,但是想要在 pycharm 中把界面的. ui 文件转换为. py文件还需要后面的配置。

4、同样可以在 externaltools 中直接点击一个加号按钮来进行配置 pyuic :

Name:Pyuic

Group:Qt

program : f :\ anaconda \ Python. exe (每个位置有自己的 Python路径)

Arguments:-mPyQt5.uic.pyuic$FileName$-o$FileNameWithoutExtension$.pyWorkingdirectory:$FileDir$


图4-5 Pyqt5配置

5、至此就全部被配置好了,接下来要做的事情就是 test ,回到 pycharm , tools -< Qt- Qt> Qtdesigner ,点击按钮即可直接打开 designer :

然后自己创建一个最简单的应用界面,把这个应用界面进行保存(我默认为它被保存在当前 pycharm 项目的目录下,我这里叫" first .ui")。

6、返回 pycharm ,就会看到第一个工程的目录下己经产生了第一个. ui ,右键它, Qt- l的 pyuic ,点击后就会自动产生第一个. py 文件,接下来便是我们的进行界面设计及编程了。

4.3数据集介绍

mnist手写数字分类数据集是计算机视觉和深度学习中使用的标准数据集。此数据集将是本全连接神经网络模型训练的测试集和训练集。mnist数据集采用的大型手写体数据库,它可以被作为一种用来进行训练和检索测试的实验样品,在机器学习这一技术领域的实验数据集中被广泛采纳,而且每一个实验样品都必须是由0-9的大量手写体数码所组合构成。该系统的数据集主要包括四个组成部分:训练图像集,测试标签集,训练标签集。其中60000张的图片可以直接作为一个训练集,而余的10000张图片则同样可以直接作为一次测试的检查集。每张图片都被精心地整理成一幅二值化的影像,大小都保持着28*28。针对这些不太方便地处理存储问题进行了处理,将这些影像处理维度转化成一个维度(1,784)的矢量。

mnist的一个手写数字数据来自一个叫做nist的特殊数据库。它还包含用于手写二进制的数字文件储存库sd1和sd3。其中,sd的数据集主要来自一家普通高中,而sd3的数据集主要来自census bureau。从信息来源的角度来看,sd3样本在清晰度和信息完整性方面优于sd1号。如果将sd1号和sd3样本中的一个作为训练样本,另一个作为测试样本,则训练后的网络模型在信息量和拟合时效性方面可能较弱。因此,我们总结了数据库。3000个sd1号样本和30000个sd3样本组合形成6000个训练样本,测试样本由5000个sd1号样本和5000个sd3样本组成。mnist数据集的结构和组成如表5.1所示。为了最大限度地消除除自身差异外的其他因素的干扰,250名工具作者可以为每个样本集人编写,编写测试集的工作人员和编写测试集的工作人员互不重复。

NameSD3SD1

Trainig Set3000030000

Testing Set50005000

表4-1mnist数据集组成成分

下面的图4-5显示了mnist手写数字数据集的一些示例图像。从这些样本图像中,我能清晰地看手写数字的标准化与印刷数字的标准化有很大的区别。手写体数字的书写方式是随机的,一起也考虑了样本头像的变形。


4-5 mnist手写数字数据集的部分样本图片示例

对于同一种数字,由于这些数字是不同的人进行阅读和书写,每个人的阅读和书写方式习惯各有所不同,因此在这些数字相互之间也就会存在很大的区别。下图4-6显示了mnist数据集内部的同一位数字0进行差别测试。


4-6mnist手写数字数据集同一数字0之间差异比较

4.3.2关于mnist数据集测试

为实现编程程序的简单性,Pytorch框架不包含任何样式的数据集,这些训练模型的数据集需要我们自行下载,因此我们需要下载相应的训练集和测试集和验证集的数据。首先,下载mnist数据集,它包括四个部分,具体内容如下。

Trainingsetimages:train-images-idx3-byte.gz,其中包含60000个样本,解压后大小为47MB;

Trainingsetlabels:tin-labels-idkl-byte.gz,其中包含60000个标签,解压后大小为60KB;

Testsetimages:t0k-images-idx3-byte.gz,其中包含10000个样本,解压后大小7.8MB;

Testsetlabels:tk-labels-idxi-byte.gz,其中包含1000个标签,解压后10KB。

脚本文件getmnist.sh中的loop语句循环并下载mnist数据集的四个文件,如果运行成功,将生成这四个文件。Pytorch不行直接训练下载的四个文件,下载的文件格式也不是以图的形式储存的。为加快读取和训练的速度,提升硬盘的利用率,将文件转换成一种更高效的存储方式进行储存,即采用四种文件转换lmdb或leveldb格式,将格式转换后的训练集和测试集放入目录中。根据计算机中配置文件是否已更改,修改配置文件lenetsolver。文件内容指定网络训练参数。例如,最大迭代次数由maxIter指定,初始值设置为10000,输出中间结果为snapshot,初始值设置为5000。

4.4关于Pytouch简介

Pytorch也就是torch的最新版本 ,属于基于python 最新一个开发的版本,它所指的是由于facebook 自己设计和研发出来的基于 gpu 加速神经网络的一个编程框架,专为基于 gpu 加速的基于新型 dnn ( dnn )深度神经网络而量身定制设计和开发并进行了编程。 torch 是一个基于多维矩阵的最佳张力矢量( tensor )数据库,它已在智能学习和其他各种新型数学密集型计算领域得到了广泛研究和应用。与 pensorflow 的完全动态计算图不同, Pytorch的完全动态计算图必须保证它们都是完全动态的,能够按照完全动态计算图的特点和要求对其进行实时的改变。但因它的 torch 语言所有人都使用的是 lua ,导致其在国内却非常的小众,而且也慢慢地被那些长期使用 python 和 tensorflow 使用者和人员抢占了大量的用户。 Pytorch软件系统作为最新的编程语言和经典智能学习库torch的开发终端,为那些熟悉 python 这种编程语言的专业使用者和设计师提供了一种舒适的快速编写和使用编程代码的选择。

4.4.1Pytorch优点

1.支持图形计算的动态方法:

PyTorch在可在运行时播放的动态图的基础上构建深度学习应用程序。其他流行的深度学习框架适用于静态图,其中必须事先构建计算图。用户无法查看处理图形的GPU或CPU在做什么。而在PyTorch中,每个级别的计算都可以访问并达到峰值,通过动态方法,可以完全深入到计算的每个层次,并准确了解正在发生的事情。”

2.易用:

Pytorch这是为面向对象语言设计的所有应用程序框架中最优雅的。Pytorch的面向对象软件界面设计主要源于其torch,而Pytorch的对象界面设计以其灵活性和易用性著称。keras的设计灵感来自torch的设计。Pytorch继承了tourch的传统,特别是api的设计和每个模块之间的软件接口都与torch相同。Pytorch这款产品最好的设计就是更符合现代社会人们的产品理念。它的目的可以说是让我们的产品用户把更多的注意力放在产品理念的研究和实现上,而不必仔细考虑产品框架本身的诸多约束。

3.活跃的社区:

Pytorch提供了完整的文章资料,循序渐进地详细写出了文章导读以及指引,作者亲手设计维护的这个论坛平台可以提供广大用户在网上互相交流及发帖求教。facebook中国人工智能技术研究院向它的Pytorch很快提供了强大的技术支撑,作为目前正在全球排名世界前三位的国际深度机器学习领域研究学术组织,fair的大量技术支撑已经完全足够帮助让Pytorch很快获得了高可持续性的产品开发和技术更新,不至于再次像许多由一些私人或者特别是专业开发技术公司所自行设计的开发框架一样短暂地昙花一现。

4.Pytorch常用工具包

torch:类似NumPy的张量库,强GPU支持;

torch.nn:为了功能最大化其使用灵活性未被广泛涉及、与toautograd等等进行数据深度分析集成的大型神经网络数据库;

torch . optim :与 torch . nn 一起被广泛使用的标准优化文件包,其中涵盖 sgd 、 rmsprop 、 lbfgs 、 adam 等多种标准的优化文件。

torch . utils :一个数据的载入器。具有训练器和其它的便利用途;

torch.legacy(.nn/.optim):对于一个处理器的向后层从兼容性的角度考虑,从新的torch中直接删除重写出来的legacy执行代码。

4.5本章小节

本章详细介绍了实现本基于全连接神经手写数字识别系统所需要软件环境的搭建工作,并对使用的数据集以及所使用的神经网络框架Ptorch进行了简要的介绍。对我们系统的实现打好了基础。





















5手写数字识别系统的实现

5.1构建神经网络模型

Pytorch提供了一种构建这样的网络的便捷方法,在这里我们使用torch.nn中的方法。在 Pytorch中的torch . nn数据库包中为我们提供了许许多多与我们所需要实现的深度神经网络其中的具体功能密切相关的类,这些主要是涵盖了基于深度神经网络模型设计在其基础上进行参数最小化和设计等各个过程中的常见技术内容,比如基于深度神经网络模型设计中的卷积层、池化级、全连接层这类进行各种层次结构的计算方法、防止被过拟合的各种参数归一化的计算方法、 dropout 等等,还有与激活函数组成部分线性激活函数,非线性激活函数及其相关的方法等。

torch.nn.sequential这个参数类我们也是其中的一种基于一个序列的参数容器,通过在这个基于类的参数容器中直接安装和自动嵌入一套各种与各类神经网络中具体的参数功能密切息息相关的参数类,来直接地去完成对于各种神经网络参数模型的自动搭建,最主要的一点就是,参数序列都会按照我们已经预先定义好的每个序列自动地将其传递出来给我们直接下去。

我们完全可以把所有被嵌套到容器中的各个单元看成为各种不同类型的模块,它们之间可以任意地自由选择。同时我们使用了Pytorch的函数nn.linear()函数方法,它是主要被应用于在卷积中的层中用来设置一个网络系统中的全域网连接层的,需要特别注意的一个地方就是全网络连接层的所有网络输入与输出传递所得到的所有输出都必须可以是二维层的张量,一般的张量形状分别可以表示为[batch_size,size],不同于卷积中的层所设置要求的所有输入和输出传递所得到的所有输出都必须是四维张量。通过nn.linear()的特定方法转化为二维张量。

5.1.1神经网络模型实现过程

1、数据归一化

归一化就是把我们所有可能需要数据进行统一处理,所有数据都经过统一处理之后(经过某种特殊算法)被统一限制到我们所需要的特定处理区域。归一化主要用于目的就是为了后面模型的数据处理更加方便,其次就是为了能够保证整个模型在实际运行过程中的数据收敛计算速度可以加快。

具体实现代码如下。

#数据归一化

transform = transforms.Compose([transforms.ToTensor(),

transforms.Normalize((0.5,), (0.5,))])

2、安装数据集并对数据集进行测试

具体实现代码如下。

#测试数据集

testset = datasets.MNIST('.', download=False, train=False, transform=transform)

testloader = torch.utils.data.DataLoader(testset, batch_size=1, shuffle=True)

3、构建全连接网络模型

通过nn.Sequential方法可以构建如下五层网络模型。由于 mnist 的数据集每张图片 mnist 的数据集每张图片都是一个有28*28个像素的节点,所以输入是28*28;MNIST一共有10类,因此输出是10个点即输入是28*28的矩阵,为了方便全连接层的处理,我们把它打平成784层的向量,然后中间节点都是逐级递减变为392-196-98-49-10.总共为五层神经网络。

具体实现代码如下。

#神经网络模型

model=nn.Sequential(nn.Linear(784,392),

nn.ReLU(),

nn.Linear(392,196),

nn.ReLU(),

nn.Linear(196,98),

nn.ReLU(),

nn.Linear(98,49),

nn.ReLU(),

nn.Linear(49,10),

nn.LogSoftmax(dim=1))

4、损失函数

损失函数是一种用来用于判断和衡量评价分析模型函数中的损失预测值与模型真实值之间得分是否相同的一种程度,损失值在函数中的得分愈高越好,通常该分析模型的基本特点也就是模型性能也就越好。不同能量模型所需要采用的能量损失梯度函数也可能相差很大。本模型使用Pytorch框架中的nn.NLLLoss()方法。

具体实现代码如下:

#损失函数

        cretirion = nn.NLLLoss()

        for e in range(train_number_epochs):

            running_loss = 0

            for images, labels in trainloader:

                images = images.view(images.shape[0], -1)

                optimizer.zero_grad()

                score = model(images)

                loss = cretirion(score, labels)

                loss.backward()

                optimizer.step()

                running_loss += loss.item()

            else:

                self.textBrowser_result.append(f"Training loss: {running_loss / len(trainloader)}")

                print(f"Training loss: {running_loss / len(trainloader)}")

5、保存手写数字识别系统模型。

具体实现代码如下:

#存储模型参数

        state = {'net': model.state_dict()}

        torch.save(model.state_dict(), 'modelpara.pth')

5.2实现效果

支持设计的Python界面代码如下。界面如图所示。界面当中两个按钮以及三个输入框。可以通过界面设Train_number_epochs,Train_batchsize,Learning_rate这三个属性的参数,点击训练按钮进行重新训啦,即可重新训练模型,训练好的模型将保存为modelpara.pth文件,点击【选择图片】将随机从测试集中选择一张数字图片,点击【开始】将基于modelpara.pth对所选图片进行识别,并将结果输出至界面。


图5-1输入三种属性



5.3本章小结

此章节是本论文的核心部分,实现手写数字识别系统所涉及到的技术实现部分集中在本章。系统采用Pytorch等机器学习系统框架设计,使用mnist数据集用来模型训练,搭建实现了一种能够实现手写数字识别的全连接式神经网络。在此项技术的研究基础上,我们已经完成了基于全连接神经网络数字手写图像识别。通过多次数学仿真和模拟实验充分研究了不同的网络优化设计方法和神经网络优化模型及其结构对神经网络数据识别率、误识率、损失函数等产生的直接影响,最终成功设计并研究搭建了一种具有性能最优的全连接神经网络优化模型emodelpara.pth。可以完美地实现对手写数字的识别。






结论

在当今世界经济全面发展、信息化水平全面提高和自动化水平提升的时代大背景下,对于手写式数字识别的要求已经变得非常急迫。鉴于目前采用手写体的数字识别系统技术实现方法的应用特殊性和技术局限性,本文将一个基于AI的人工智能、大数据等新兴现代信息识别技术以及结合当前我国实际中所应用的研究思路,结合全连接神经网络在图像分类和处理上的特点和优势,提出了如何有效地利用全连接神经网络来分类识别手写体的数字,同时为了获得更高的识别率和更优的性能,现将其主要内容整理总结一下。

。本文主要是通过深度学习算法的研究,将其运用到实际的场景中,解决了实际中的问题。也为我们把深度学习技术运用到实际生活场景中提供了参考。本文对手写识别系统功能实现的需求、现状、难点等进行了分析,并对当前解决手写数字识别方案进行了介绍。

2.对全连接神经网络、深度学习算法、Pytorch框架等进行了学习。掌握了深度学习训练前向传播,反向传播等的具体实现方式。同时结合了手写数字识别系统的应用功能对实际开发过程中的要求作出了分析。

3.通过深度学习模型训练得到手写数字识别模型,同时通过PyQt技术搭建了可视化的手写数字识别系统,系统可实现数字识别、模型训练、更改训练参数等功能。

4.构建模型时通过参数调优和前向传播、反向传播等过程训练得到优秀的数字手写识别模型,得到模型后对实用性、识别效果等进行了验证。但是,由于研究时间有限,本次测试系统在设计上仍然存在一些缺陷,并且有待于进一步改善,比如在训练数据集上存在的准确率不高及在实际应用中的鲁棒性不高等问题。此问题可能需要对前向传播、反向传播过程中的损失函数、梯度函数等进行调整,同时加大数据集的数量,采用交叉验证等训练方式,取得较好效果的模型。







参考文献

[1] 何西麟.基于深度学习的手写体字符识别研究与实现[D].广州:中山大学,2015.

[2] 黄睿,陆许明,邬依林.基于Tensor Flow深度学习手写体数字识别及应用[J].电子技术应用,2018,44(10):6-9.

[3] 徐胤,袁浩巍,李智.基于卷积神经网络和Tensor Flow的手写数字识别研究[J].上海电气技术,2018,11(1):31-34.

[4] 吕红.基于卷积神经网络的手写数字识别系统的设计[J].智能计算机与应用,2019,9(02):54-56+62.

[5] 宋晓茹,吴雪,高嵩,陈超波.基于深度神经网络的手写数字识别模拟研究[J].科学技术与工程,2019,19(05):193-196.

[6] 深度学习[M]. 人民邮电出版社, 伊恩·古德费洛;;约书亚·本吉奥;;亚伦·库维尔, 2017

[7] 机器学习[M]. 清华大学出版社, 周志华,2016

[8]  Neri C G, Villegas O O V, Sánchez V G C, et al. A convolutional neural network for handwritten digit recognition[J]. International Journal of Combinatorial Optimization Problems and Informatics, 2020, 11(1): 97.

[9]  Y. LeCun, C. Cortes and C. JC Bur, “MNIST handwritten digit database”, AT&T Labs, 2010. Available: http://yann. lecun. com/exdb/mnist 2.

[10] Y. Chajri, B. Bouikhalene, “Handwritten mathematical expressions recognition”, International Journal of Signal Processing, Image Processing and Pattern Recognition, vol. 9, no. 5, p. 69-76, 2016。

你可能感兴趣的:(计算机-基于全连接神经网络的 手写数字识别系统的设计与实现)