我的毕业设计记录

设计题目:普通对象图像的分类

2017年5月25日
~~~~文档排版没有规整,而且丢失了图片描述,我从word转到md造成的,我会抽空整理 ~~~~

摘要:

据google调查报告显示,android未出现之前,java语言在linux一些社区并不被看好,原因通常大多围绕在java的虚拟机运行方式。当android出现之后,大放异彩,收到火热追捧,android项目java可以说是功不可没,linux具有很好的硬件移植性,java具有很棒的平台一直性。Linux至出现这么多年市场占有率只有1%左右,而android出现仅仅五年就有70%市场占有率,优质app应用50万以上。几乎所有设备都能运行android,而android恰好又赶上了塞班操作系统不符时代所需的时期,即随之引发了一场移动终端革命浪潮。

学习是人类具有的一种重要智能行为,但究竟什么是学习,长期以来却众说纷纭。社会学家、逻辑学家和心理学家都各有其不同的看法。

机器学习有下面几种定义:"机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能"。

机器学习已经有了十分广泛的应用,例如:数据挖掘计算机视觉自然语言处理生物特征识别搜索引擎医学诊断、检测信用卡欺诈证券市场分析、DNA序列测序、语音手写识别、战略游戏机器人运用。

关键字:机器学习,深度学习,linux,android,python

####目 录

第一章 绪论 1

1.1 发展情况 1

1.2 研究现状 1

1.3 研究前景展望 1

1.4 选题的目的及意义 1

第二章 系统可行性分析 1

2.1 经济可行性分析 1

2.2 操作可行性分析 1

2.3 技术可行性分析 1

2.3.1 myeclipse概述 1

2.3.2 java概述 1

2.3.3 python概述 1

第三章 需求分析 1

3.1 软件功能描述 1

3.2 系统功能分析 1

第四章 软件系统详细设计 1

4.1 系统设计原理 1

4.2 系统工作模式 1

4.2.1 android的活动创建过程: 1

4.2.2 tensorflow工作模式: 1

4.2.3 Android项目目录结构: 1

4.2.4 项目运行分析: 1

4.2.5 应用运行实图分析: 1

4.3 核心代码示例 1

第五章 系统测试 1

5.1 数据训练过程的变化 1

5.2 测试数据: 1

总 结 1

参考文献 2

致 谢 1

第一章 绪论

1.1 发展情况

机器学习是人工智能研究较为年轻的分支,它的发展过程大体上可分为4个时期。

第一阶段是在20世纪50年代中叶到60年代中叶,属于热烈时期。

第二阶段是在20世纪60年代中叶至70年代中叶,被称为机器学习的冷静时期。

第三阶段是从20世纪70年代中叶至80年代中叶,称为复兴时期。

机器学习的最新阶段始于1986年。

机器学习进入新阶段的重要表现在下列诸方面:

(1) 机器学习已成为新的边缘学科并在高校形成一门课程。它综合应用心理学、生物学和神经生理学以及数学、自动化和计算机科学形成机器学习理论基础。

(2) 结合各种学习方法,取长补短的多种形式的集成学习系统研究正在兴起。特别是连接学习符号学习的耦合可以更好地解决连续性信号处理中知识与技能的获取与求精问题而受到重视。

(3) 机器学习与人工智能各种基础问题的统一性观点正在形成。例如学习与问题求解结合进行、知识表达便于学习的观点产生了通用智能系统SOAR的组块学习。类比学习与问题求解结合的基于案例方法已成为经验学习的重要方向。

(4) 各种学习方法的应用范围不断扩大,一部分已形成商品。归纳学习的知识获取工具已在诊断分类型专家系统中广泛使用。连接学习在声图文识别中占优势。分析学习已用于设计综合型专家系统。遗传算法与强化学习在工程控制中有较好的应用前景。与符号系统耦合的神经网络连接学习将在企业的智能管理与智能机器人运动规划中发挥作用。

(5) 与机器学习有关的学术活动空前活跃。国际上除每年一次的机器学习研讨会外,还有计算机学习理论会议以及遗传算法会议。

1.2 研究现状

基于学习策略的分类 

学习策略是指学习过程中系统所采用的推理策略。一个学习系统总是由学习和环境两部分组成。由环境(如书本或教师)提供信息,学习部分则实现信息转换,用能够理解的形式记忆下来,并从中获取有用的信息。在学习过程中,学生(学习部分)使用的推理越少,他对教师(环境)的依赖就越大,教师的负担也就越重。学习策略的分类标准就是根据学生实现信息转换所需的推理多少和难易程度来分类的,依从简单到复杂,从少到多的次序分为以下六种基本类型:

1)机械学习

学习者无需任何推理或其它的知识转换,直接吸取环境所提供的信息。如塞缪尔的跳棋程序,纽厄尔西蒙的LT系统。这类学习系统主要考虑的是如何索引存贮的知识并加以利用。系统的学习方法是直接通过事先编好、构造好的程序来学习,学习者不作任何工作,或者是通过直接接收既定的事实和数据进行学习,对输入信息不作任何的推理。

2)示教学习

学生从环境(教师或其它信息源如教科书等)获取信息,把知识转换成内部可使用的表示形式,并将新的知识和原有知识有机地结合为一体。所以要求学生有一定程度的推理能力,但环境仍要做大量的工作。教师以某种形式提出和组织知识,以使学生拥有的知识可以不断地增加。这种学习方法和人类社会的学校教学方式相似,学习的任务就是建立一个系统,使它能接受教导和建议,并有效地存贮和应用学到的知识。不少专家系统在建立知识库时使用这种方法去实现知识获取。示教学习的一个典型应用例是FOO程序。

3)演绎学习

学生所用的推理形式为演绎推理。推理从公理出发,经过逻辑变换推导出结论。这种推理是"保真"变换和特化的过程,使学生在推理过程中可以获取有用的知识。这种学习方法包含宏操作学习、知识编辑和组块技术。演绎推理的逆过程是归纳推理。

4)类比学习

利用二个不同领域(源域、目标域)中的知识相似性,可以通过类比,从源域的知识(包括相似的特征和其它性质)推导出目标域的相应知识,从而实现学习。类比学习系统可以使一个已有的计算机应用系统转变为适应于新的领域,来完成原先没有设计的相类似的功能。

类比学习需要比上述三种学习方式更多的推理。它一般要求先从知识源(源域)中检索出可用的知识,再将其转换成新的形式,用到新的状况(目标域)中去。类比学习在人类科学技术发展史上起着重要作用,许多科学发现就是通过类比得到的。例如著名的卢瑟福类比就是通过将原子结构(目标域)同太阳系(源域)作类比,揭示了原子结构的奥秘。

5)基于解释的学习

学生根据教师提供的目标概念、该概念的一个例子、领域理论及可操作准则,首先构造一个解释来说明为什该例子满足目标概念,然后将解释推广为目标概念的一个满足可操作准则的充分条件。EBL已被广泛应用于知识库求精和改善系统的性能。

6)归纳学习

归纳学习是由教师或环境提供某概念的一些实例或反例,让学生通过归纳推理得出该概念的一般描述。这种学习的推理工作量远多于示教学习和演绎学习,因为环境并不提供一般性概念描述(如公理)。从某种程度上说,归纳学习的推理量也比类比学习大,因为没有一个类似的概念可以作为"源概念"加以取用。归纳学习是最基本的,发展也较为成熟的学习方法,在人工智能领域中已经得到广泛的研究和应用。

基于所获取知识的表示形式分类 

学习系统获取的知识可能有:行为规则、物理对象的描述、问题求解策略、各种分类及其它用于任务实现的知识类型。

对于学习中获取的知识,主要有以下一些表示形式:

1)代数表达式参数

学习的目标是调节一个固定函数形式的代数表达式参数或系数来达到一个理想的性能。

2)决策树

决策树来划分物体的类属,树中每一内部节点对应一个物体属性,而每一边对应于这些属性的可选值,树的叶节点则对应于物体的每个基本分类。

3)形式文法

在识别一个特定语言的学习中,通过对该语言的一系列表达式进行归纳,形成该语言的形式文法。

4)产生式规则

产生式规则表示为条件—动作对,已被极为广泛地使用。学习系统中的学习行为主要是:生成、泛化、特化或合成产生式规则。

5)形式逻辑表达式

形式逻辑表达式的基本成分是命题、谓词、变量、约束变量范围的语句,及嵌入的逻辑表达式。

6)图和网络

有的系统采用图匹配和图转换方案来有效地比较和索引知识。

7)框架和模式(schema)

每个框架包含一组槽,用于描述事物(概念和个体)的各个方面。

8)计算机程序和其它的过程编码

获取这种形式的知识,目的在于取得一种能实现特定过程的能力,而不是为了推断该过程的内部结构。

9)神经网络

这主要用在联接学习中。学习所获取的知识,最后归纳为一个神经网络。

10)多种表示形式的组合

有时一个学习系统中获取的知识需要综合应用上述几种知识表示形式。

根据表示的精细程度,可将知识表示形式分为两大类:泛化程度高的粗粒度符号表示、??泛化程度低的精粒度亚符号(sub-symbolic)表示。像决策树、形式文法、产生式规则、形式逻辑表达式、框架和模式等属于符号表示类;而代数表达式参数、图和网络、神经网络等则属亚符号表示类。

按应用领域分类 

最主要的应用领域有:专家系统、认知模拟、规划和问题求解、数据挖掘、网络信息服务、图象识别、故障诊断、自然语言理解、机器人和博弈等领域。

从机器学习的执行部分所反映的任务类型上看,大部分的应用研究领域基本上集中于以下两个范畴:分类和问题求解。

(1)分类任务要求系统依据已知的分类知识对输入的未知模式(该模式的描述)作分析,以确定输入模式的类属。相应的学习目标就是学习用于分类的准则(如分类规则)。

(2)问题求解任务要求对于给定的目标状态,寻找一个将当前状态转换为目标状态的动作序列;机器学习在这一领域的研究工作大部分集中于通过学习来获取能提高问题求解效率的知识(如搜索控制知识,启发式知识等)。

综合分类

综合考虑各种学习方法出现的历史渊源、知识表示、推理策略、结果评估的相似性、研究人员交流的相对集中性以及应用领域等诸因素。将机器学习方法[1] 区分为以下六类:

1)经验性归纳学习

经验性归纳学习采用一些数据密集的经验方法(如版本空间法、ID3法,定律发现方法)对例子进行归纳学习。其例子和学习结果一般都采用属性、谓词、关系等符号表示。它相当于基于学习策略分类中的归纳学习,但扣除联接学习、遗传算法、加强学习的部分。

2)分析学习

分析学习方法是从一个或少数几个实例出发,运用领域知识进行分析。其主要特征为:

·推理策略主要是演绎,而非归纳;

·使用过去的问题求解经验(实例)指导新的问题求解,或产生能更有效地运用领域知识的搜索控制规则。

分析学习的目标是改善系统的性能,而不是新的概念描述。分析学习包括应用解释学习、演绎学习、多级结构组块以及宏操作学习等技术。

3)类比学习

它相当于基于学习策略分类中的类比学习。在这一类型的学习中比较引人注目的研究是通过与过去经历的具体事例作类比来学习,称为基于范例的学习,或简称范例学习。

4)遗传算法

遗传算法模拟生物繁殖的突变、交换和达尔文的自然选择(在每一生态环境中适者生存)。它把问题可能的解编码为一个向量,称为个体,向量的每一个元素称为基因,并利用目标函数(相应于自然选择标准)对群体(个体的集合)中的每一个个体进行评价,根据评价值(适应度)对个体进行选择、交换、变异等遗传操作,从而得到新的群体。遗传算法适用于非常复杂和困难的环境,比如,带有大量噪声和无关数据、事物不断更新、问题目标不能明显和精确地定义,以及通过很长的执行过程才能确定当前行为的价值等。同神经网络一样,遗传算法的研究已经发展为人工智能的一个独立分支,其代表人物为霍勒德。

5)联接学习

典型的联接模型实现为人工神经网络,其由称为神经元的一些简单计算单元以及单元间的加权联接组成。

6)增强学习

增强学习的特点是通过与环境的试探性交互来确定和优化动作的选择,以实现所谓的序列决策任务。在这种任务中,学习机制通过选择并执行动作,导致系统状态的变化,并有可能得到某种强化信号(立即回报),从而实现与环境的交互。强化信号就是对系统行为的一种标量化的奖惩。系统学习的目标是寻找一个合适的动作选择策略,即在任一给定的状态下选择哪种动作的方法,使产生的动作序列可获得某种最优的结果(如累计立即回报最大)。

在综合分类中,经验归纳学习、遗传算法、联接学习和增强学习均属于归纳学习,其中经验归纳学习采用符号表示方式,而遗传算法、联接学习和加强学习则采用亚符号表示方式;分析学习属于演绎学习。

实际上,类比策略可看成是归纳和演绎策略的综合。因而最基本的学习策略只有归纳和演绎。

从学习内容的角度看,采用归纳策略的学习由于是对输入进行归纳,所学习的知识显然超过原有系统知识库所能蕴涵的范围,所学结果改变了系统的知识演绎闭包, 因而这种类型的学习又可称为知识级学习;而采用演绎策略的学习尽管所学的知识能提高系统的效率,但仍能被原有系统的知识库所蕴涵,即所学的知识未能改变系统的演绎闭包,因而这种类型的学习又被称为符号级学习。

1.3 研究前景展望

机器学习领域的研究工作主要围绕以下三个方面进行:

(1)面向任务的研究

研究和分析改进一组预定任务的执行性能的学习系统。

(2)认知模型

研究人类学习过程并进行计算机模拟。

(3)理论分析

从理论上探索各种可能的学习方法和独立于应用领域的算法

机器学习是继专家系统之后人工智能应用的又一重要研究领域,也是人工智能和神经计算的核心研究课题之一。现有的计算机系统和人工智能系统没有什么学习能力,至多也只有非常有限的学习能力,因而不能满足科技和生产提出的新要求。对机器学习的讨论和机器学习研究的进展,必将促使人工智能和整个科学技术的进一步发展。

1.4 选题的目的及意义

机器学习是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。

  学习能力是智能行为的一个非常重要的特征,但至今对学习的机理尚不清楚。人们曾对机器学习给出各种定义。H.A.Simon认为,学习是系统所作的适应性变化,使得系统在下一次完成同样或类似的任务时更为有效。R.s.Michalski认为,学习是构造或修改对于所经历事物的表示。从事专家系统研制的人们则认为学习是知识的获取。这些观点各有侧重,第一种观点强调学习的外部行为效果,第二种则强调学习的内部过程,而第三种主要是从知识工程的实用性角度出发的。

  机器学习在人工智能的研究中具有十分重要的地位。一个不具有学习能力的智能系统难以称得上是一个真正的智能系统,但是以往的智能系统都普遍缺少学习的能力。例如,它们遇到错误时不能自我校正;不会通过经验改善自身的性能;不会自动获取和发现所需要的知识。它们的推理仅限于演绎而缺少归纳,因此至多只能够证明已存在事实、定理,而不能发现新的定理、定律和规则等。随着人工智能的深入发展,这些局限性表现得愈加突出。正是在这种情形下,机器学习逐渐成为人工智能研究的核心之一。它的应用已遍及人工智能的各个分支,如专家系统、自动推理、自然语言理解、模式识别、计算机视觉、智能机器人等领域。其中尤其典型的是专家系统中的知识获取瓶颈问题,人们一直在努力试图采用机器学习的方法加以克服。

第二章 系统可行性分析

机器学习是编程的优美结晶,机器学习为人类的生活带来无限便捷的可能,只是目前机器学习处于发展初期,从google的只能机器人阿尔法go来讲,已是目前人类机器学习的最高指标,但是除了机器人,机器学习在现代生活中处处可见,指纹识别,人脸识别,以及聊天机器人,都是没有人工干预的人类现象机器化,这让我们的更多机械重复运动由机器代替,来让人们从事更有意义的事情,由此可见,机器学习在现代社会的重要性

2.1 经济可行性分析

由于机器学习在目前处于发展初期,又在移动设备终端加入,在设计和制作机器学习系统中,需要花费大量人力和财力,就本程序来看,需要使用linux系统来以python科学计算,在计算机配置不是很好的情况下,训练机器学习一个类内的图片识别就需要十天甚至更高,可见资源消耗之大,但是从长远来看,这种资源的消耗是呈逐渐下降趋势的,并且可带来的经济效应是不断上升趋势,所以经济可行性是良好的

2.2 操作可行性分析

本软件是采用myeclipse加androidstudio进行编码开发,使用的语言有java,python,xml,C(机器学习框架的底层实现)。Myeclipse是eclipse的一个插件版本,用于创建各类软件,如php,java等等。Androidstudio是google唯一承认的android官方开发ide,具有良好的开发体验。Android在现代生活必不可少,因其使用linux内核和java高层实现,因此本软件使用了linux系统来进行机器训练,puthon为基础的科学计算。

2.3 技术可行性分析

2.3.1myeclipse概述

MyEclipse企业级工作平台是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTMLStrutsJSPCSSJavascriptSpringSQLHibernate[1] 。

MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse可以支持Java ServletAJAXJSPJSFStrutsSpringHibernateEJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

2.3.2 java概述

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等。

2.3.3 python概述

Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件源代码解释器CPython遵循GPL协议。

Python语法简洁清晰,特色之一是强制用空白符作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3] 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

第三章 需求分析

本设计为android平台的机器学习实验,该系统是googletensorflow学习框架和android应用程序的结合。Googletensorflow是google近年来一直在发展和推广的机器深度学习框架,该框架不是一门具体的语言,而是一种思维的编程描述,最近的阿尔法go机器人就是采用了tensorflow框架用了很长时间才研发出来的,tensorflow给开发者提供了linux和macos的框架环境,现在在windows操作系统环境下为测试不稳定版本,所以应用程序在linux系统环境下进行的机器学习模型的训练。Android在移动终端占有的市场率相当大,在移动设备上研究机器学习,就不可能跳过android系统,android也成为了现在社会生活的重要分支。

开发环境为Google官方提供的Android开发工具ide,Androidstudio,该ide为开发者提供了相对全面的功能和工具,能够更方便的开发Android应用程序,在以前的myeclipse开发环境中,Android开发是一个插件分支,而在Androidstudio是为Android开发的一个ide,提供了应用调试,断点测试,sdk管理等。最重要的一个是Androidstudio是采用gradle管理,gradle是一个依赖管理的框架,在着这种管理模式下开发应用,就不用为包的引入与使用而去做更多的机械式重复的步骤了。

该系统在开发阶段,我们准备了一个图像识别的功能,但是由于设备配置有限,目前的机器学习模型识别并不是特别明了。

3.1 软件功能描述

应用名称为海豚识别

(1) 图像识别,利用摄像头对捕捉图像的识别,通过指定训练,分析图中展示的一切可能

3.2 系统功能分析

根据应用的功能来分析使用范围,比如可用应用来识别语言文字,可以是用在任何非正式密码场合。

第四章 软件系统详细设计

4.1系统设计原理

本应用是遵循android应用程序的基本设计原理设计,由java处理逻辑,xlm设计view视图,应用使用ndk与jni来作为c语言的库处理和java方面的调用,因为tensorflow框架使用了c语言。当然,还有python语言的加入,但是python不会出现在应用程序中,而是运用python科学计算框架来训练tensorflow的学习模型,最后的模型为.pb文件,由tensorflow框架来加载并且编译,处理来自Android客户端的请求。我们认为Android的设计模式已经遵循了mvc的模式,因为视图与控制已经分开。本应用使用了Androidannotation的ioc依赖注入框架,来简化android控制器重对视图控件的重复代码,也更好的处理视图加载和预处理。

4.2 系统工作模式

4.2.1android的活动创建过程:

4.2.2tensorflow工作模式:

由训练好的模型文件来分析图像的色码信息特征,并返回类别与对比百分比

获得学习模型文件.pb

加载学习模型labal文件.txt

接收由二进制码转化过来的图像类别信息,分块色码信息

获得学习模型文件.pb

加载学习模型labal文件.txt

接收由二进制码转化过来的图像类别信息,分块色码信息

接收由二进制码转化过来的图像类别信息,分块色码信息

4.2.3Android项目目录结构:

Manifests:android应用活动描述文件,xml文件里描述了application级别的描述以及activity活动级别的描述,最重要的是需要在文件中描述mainactivity,也就是程序入口的activity

Java:java包包含了文件的逻辑处理代码和程序id管理器R.java,还有测试文件夹

Assets:包含了文件所需要的模型资源文件

Jnilibs:包含项目所需要的.so文件和jar文件

Res:包含项目所需要的所有资源文件,包括图片,以及string,color,value等资源描述文件(xml)

4.2.4项目运行分析:

算法介绍(举例MNIST数据集的训练):

MNIST 数据集中,手写数字是 28x28 像素的灰度图像。将它们进行分类的最简单的方法就是使用 28x28=784 个像素作为单层神经网络的输入。

神经网络中的每个「神经元」对其所有的输入进行加权求和,并添加一个被称为「偏置(bias)」的常数,然后通过一些非线性激活函数来反馈结果。

为了将数字分为 10 类(0 到 9),我们设计了一个具有 10 个输出神经元的单层神经网络。对于分类问题,softmax 是一个不错的激活函数。通过取每个元素的指数,然后归一化向量(使用任意的范数(norm),比如向量的普通欧几里得距离)从而将 softmax 应用于向量。

最重要的识别率取决于神经网络的层数,但是层数越多带来的隐患越多,因为不仅需要更多的事件与空间,更重要的是,可能会陷入无限循环,因此我们使用了调优函数,在一层比一层更优化的基础上得出这个函数图像,就像是突然就变好了一样。

训练流程:

程序被执行

Result(保存模型)

4.2.5应用运行实图分析:

能够识别的图像与训练的数据有关,而训练数据如果过于庞大,在个人PC机器上下需要耗费大量的资源