《深度学习技术应用》全套教学课件_第1页
《深度学习技术应用》全套教学课件_第2页
《深度学习技术应用》全套教学课件_第3页
《深度学习技术应用》全套教学课件_第4页
《深度学习技术应用》全套教学课件_第5页
已阅读5页,还剩479页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目一:基于深度学习的动物图像分类与识别人工智能应用开发全流程项目1基于深度学习的动物图片分类与识别开发环境的搭建项目2数据的准备项目3动物识别模型的开发项目4模型调用服务端的开发项目5动物识别项目的开发全套可编辑PPT课件

项目简介项目情境项目分析学习目标重点难点实施流程计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。在计算机视觉的大多数实际应用当中,计算机被预设为解决特定的任务,然而基于机器学习的方法正日渐普及,一旦机器学习的研究进一步发展,未来“泛用型”的电脑视觉应用或许可以成真。项目简介人工智能所研究的一个主要问题是:如何让系统具备“计划”和“决策能力”?这一问题便与计算机视觉问题息息相关。在这里,计算机视觉系统作为一个感知器,为决策提供信息。另外一些研究方向包括模式识别和机器学习,也因此,计算机视觉时常被看作人工智能与计算机科学的一个分支。项目简介项目简介本项目基于深度学习平台通过构建神经网络对用户上传的动物图像进行分类识别,其中数据集通过爬虫技术进行图片采集,然后通过django框架构建Web平台对识别结果进行可视化展示。随着人工智能技术(AI)的大热,基于深度学习方法的人脸识别技术已成熟落地。基于AI原理,训练出可应用于其他生物识别的算法,或将为市场带来崭新的生机。动物识别目前应用场景如下:1.AI寻宠:凭借在AI场景落地过程中拥有的深厚技术优势和领先的行业洞察,通过鼻纹识别解决方案,将有助于城市中的宠物管理,也使AI寻宠成为可能。项目情境2.猫犬识别:识别图片中是否有猫或狗的面部,适用于AI监控、城市宠物管理、智能宠物设备、智能宠物门禁等应用场景。3.犬只领养:犬只领养登记,采用生物特征进行唯一身份确认,防止宠物被遗弃,或解决走失找回时遭遇的所属权纠纷。项目情境本项目基于深度学习和神经网络为基础,拟对用户上传的动物图像进行分类识别,具体分为如下流程:1.通过爬虫技术爬取互联网动物图像资源;2.对爬取数据进行数据清洗及持久化存储操作;3.搭建深度学习平台与神经网络,对爬取的动物图像进行模型训练、参数调优、模型编译与存储;4.搭建Web平台,采集用户上传的动物图像;5.调用训练好的模型进行预测,获取预测结果并响应给用户实现最终的动物分类识别。项目分析学习目标利用爬虫技术进行图像采集数据标注与数据集制作模型训练、优化与保存前后端数据交互搭建深度学习平台与神经网络搭建基于Django的web平台重点难点重点1.图像采集与数据集制作2.深度学习平台的搭建流程3.模型的构建以及利用神经网络进行模型训练4.对图像进行分类最终通过web平台进行数据回显难点1.对爬取的数据进行数据清洗并提取图像信息进行存储。2.神经网络的激活函数以及参数调优相关算法。3.前后端交互工作原理。4.模型的保存与调用。Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。本课程后续开发全部需要使用Python编程语言实现。相比其他语言经常使用英文关键字,Python具有比其他语言更有特色语法结构。实施流程输入/进入Python官网,点击Download查看所有Python可下载的解释器版本。实施流程Python下载流程我们可以选择最新的版本进行下载,例如:Python3.10.4,点击Download后会打开下载详情界面。实施流程Python下载流程Python提供了很多操作系统下的安装文件,这里我们以Windows系统为例,下载Window64位版本的Python安装包。实施流程Python下载流程下载完毕后打开下载后的Python安装包,在弹出的窗口中选择CustomizeInstallation自定义安装,勾选下方addtoPath选项。实施流程Python安装流程按图中对选项进行勾选,勾选完毕后点击Next进行下一步操作。实施流程Python安装流程163设置Python解释器的安装路径,这里建议点击Browse将解释器安装到其他目录中,点击Install进行安装。实施流程Python安装流程读条完毕后,Python的解释器已经安装完毕,点击Close关闭当前窗口,准备测试Python是否安装成功。实施流程Python安装流程按win+r打开运行框,在运行框中输入cmd打开Dos框,在Dos框中输入python-v查看Python安装版本。实施流程Python安装流程出现Python版本后,输入python按回车,如果出现图示代码说明Python安装成功。注意:安装Python解释器的时候会自动配置环境变量,如果未出现相关提示请手动配置Python环境变量。实施流程Python安装流程Pycharm是一个提供了带编码补全,代码片段,支持代码折叠和分割窗口的智能、可配置的编辑器,可帮助用户更快更轻松的完成编码工作。目前很多大企业也在使用Pycharm进行Python的开发。接下来我们演示一下Pycharm的安装流程。实施流程输入Pycharm公司官网网址/pycharm/,网页选择Download打开Pycharm下载页面。实施流程Pycharm下载流程Pycharm同样提供了多系统的下载版本,我们以Windows系统为例,选择Download下载专业版开发工具。实施流程Pycharm下载流程打开下载后的Python安装包进入欢迎界面,点击Next进行下一步操作。实施流程Pycharm安装流程选择Pycharm的安装路径,默认是安装在C盘中,这里建议点击Browser浏览本地文件夹,将Pycharm的安装路径设置为其他盘符下。实施流程Pycharm安装流程这里选择64-bitlauncher表示安装64位版本的Pycharm工具,下方勾选.py选项表示Pycharm支持打开Python格式的文件。实施流程Pycharm安装流程此界面创建Pycharm开始菜单的快捷打开方式,直接选择下方Install安装Pycharm即可,等待安装完毕即可。实施流程Pycharm安装流程启动Pycharm,第一次启动时需要对Pycharm进行设置,我们选择Donotimportsettings即可。实施流程Pycharm配置流程查看Pycharm的协议,确认无误后勾选下方选项同意用户协议,点击continue进行下一步操作。实施流程Pycharm配置流程此窗口是一个问卷调查,Pycharm会询问用户愿不愿将信息发送JetBrains来提升他们产品的质量,此处勾选DontSend。实施流程Pycharm配置流程此处勾选Pycharm的主体背景,Pycharm主打两种背景,分别为:黑底白字和白底黑字,这里看个人需求进行勾选。实施流程Pycharm配置流程执行到此步,需要对Pycharm进行激活操作,由于Pycharm是正版软件,所以需要自行购买激活码对软件进行激活操作,激活成功后点击OK即可完成Pycharm的设置。实施流程Pycharm配置流程激活成功后,选择createNewProject即可创建Python工程开始Python代码的编写。实施流程Pycharm配置流程左侧选择PurePython表示创建纯净的Python项目,中间指定项目的创建路径即可,至此Pycharm的安装与设置结束。实施流程Pycharm配置流程总结安装完Python的开发环境和Pycharm开发工具后,项目的编写以及运行就可以顺利展开。。小标题文字谢谢浏览项目二:数据集准备数据爬取与清洗什么是爬虫爬虫基本流程网页基本结构审查网页元素代码实现总结网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。什么是爬虫网页的请求和响应方式是Request和ResponseRequest:用户将自己的信息通过浏览器(socketclient)发送给服务器(socketserver)Response:服务器接收请求,分析用户发来的请求信息,收到请求信息后返回数据(返回的数据中可能包含其他链接,如:image、js、css等)浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。下图为爬虫具体流程。爬虫基本流程网页一般由三部分组成,分别是HTML(超文本标记语言)、CSS(层叠样式表)和JavaScript(简称“JS”动态脚本语言),它们三者在网页中分别承担着不同的任务。HTML负责定义网页的内容CSS负责描述网页的布局JavaScript负责网页的行为网页基本结构HTML是网页的基本结构,他是网页构成的基本语言,根据HTML语法格式不同,HTML将代码分为标签、属性、文本三大结构。标签:通过<标签名></标签名>声明,简化为<标签名/>属性:通过<标签名属性名="属性值"属性名="属性值"></标签名>声明文本:通过<标签名>文字</标签名>声明

网页基本结构下图为HTML代码经过浏览器解析后形成的画面,不同标签经过解析后会形成不同的内容结果。网页基本结构CSS表示层叠样式表,用来对HTML构建的网页进行美化操作,一般我们会通过给HTML标签添加id或者class属性来通过CSS选择器选中指定标签后添加样式。下图为添加CSS代码后的网页效果。网页基本结构JavaScript负责描述网页的行为,比如,交互的内容和各种特效都可以使用JavaScript来实现。当然可以通过其他方式实现,比如jQuery、还有一些前端框架(vue、React等),不过它们都是在“JS”的基础上实现的。网页基本结构对于一个优秀的爬虫工程师而言,要善于发现网页元素的规律,并且能从中提炼出有效的信息。因此,在动手编写爬虫程序前,必须要对网页元素进行审查。本节将讲解如何使用“浏览器”审查网页元素。浏览器都自带检查元素的功能,不同的浏览器对该功能的叫法不同,谷歌(Chrome)浏览器称为“检查”,而Firefox则称“查看元素”,尽管如此,但它们的功却是相同的,本课程推荐使用谷歌浏览器。审查网页元素下面以检查百度首页为例:首先使用Chrome浏览器打开百度,然后在百度首页的空白处点击鼠标右键(或者按快捷键:F12),在出现的会话框中点击“检查”,并进行如图所示操作:审查网页元素网页的请求和响应方式是Request和ResponseRequest:用户将自己的信息通过浏览器(socketclient)发送给服务器(socketserver)Response:服务器接收请求,分析用户发来的请求信息,收到请求信息后返回数据(返回的数据中可能包含其他链接,如:image、js、css等)浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。下图为爬虫具体流程。审查网页元素网络爬虫的应用场景:主要用于互联网网页资源的获取网络爬虫需要使用到的相关模块:urllib.request模块(内置)beautifulSoup4模块(第三方模块)lxml模块(第三方模块)代码实现编写代码之前,我们需要提前安装爬虫技术需要的相关模块。打开Pycharm,点击左上角File,选择Settings,打开设置窗口,在设置窗口中选择PythonInterpreter选项查看当前项目中已经导入的所有模块,这里点击加号按钮安装新的模块。模块安装在搜索框内输入指定模块名,例如:lxml,点击下方InstallPackage即可完成模块的安装。后续所有模块的安装请参照此流程即可。模块安装有些情况下,第三方模块资源可能在国外服务器中,正常方式下载模块可能会导致连接超时,我们可以选择通过连接国内镜像服务器下载相关模块。在Pycharm下方找到Terminal选项,表示终端,点击后打开终端准备输入安装指令。模块安装在终端内输入pipinstall-i/simple模块名指令,连接国内镜像仓库下载Python所需第三方模块包。模块安装首先我们模拟向百度首页发送请求,以此来获取服务端响应的百度首页源码,然后我们将源码解析为中文编码然后输出爬取的结果。代码实现下图为爬取后的网页源代码,我们可以看出,代码现在是非常乱的,而且每一行源代码我们都爬取到了,这时需要对数据进行转换和清洗。代码实现BeautifulSoup简称BS4(其中4表示版本号)是一个Python第三方库,它可以从HTML或XML文档中快速地提取指定的数据。BeautifulSoup语法简单,使用方便,并且容易理解。beautifulSoup4常用的三种html解析器html.parser:Python自带的解析器,运行速度较快,兼容性较差(不兼容3.2版本之前的)lxml:速度非常快,兼容性很好,需要底层C语言的支持(使用windows操作系统即可)(建议使用)html5lib:速度很慢,需要额外安装html5lib库(不建议使用)lxml是Python的第三方解析库,完全使用Python语言编写,它对Xpath表达式提供了良好的支持,因此能够了高效地解析HTML/XML文档。BS4模块详解BeautifulSoup4模块提供的解析HTML的常用方法如下:

获取元素节点: (1).soup.标签名:获取匹配到的第一个标签完整内容获取属性节点: (2).soup.标签名["属性名"]:获取第一个标签中对应属性的属性值获取文本节点: (3).soup.标签名.text:获得指定标签内部的所有文本值 批量搜寻节点: (4).soup.find_all("标签名"):获取所有匹配标签的内容(参数允许接收列表) (5).soup.find_all(attrs={"属性名":"属性值"}):获取所有该属性对应的标签内容 (6).soup.find_all(text="文本值或正则"):获取所有该文本对应的文本内容BS4模块详解本节先以爬取天气为例,演示爬虫的基本流程,并对爬取的源码进行数据转换与数据提取,最终以图表的形式进行数据可视化展示。通过输入网址/weather/101070201.shtml进入天气页面。然后借助审查元素查看网页源码,我们可以发现所有温度信息都是存储在class=”tem”的p标签中。代码实现先爬取网页源代码信息,然后通过lxml模块解析网页源码,然后通过bs4模块提供的select方法利用class选择器选中对应温度的标签信息。然后剔除无关数据。代码实现定义Python列表用来容纳每一天的最高气温和最低气温数据值,然后提取每一个标签内部的气温数据装进列表中。代码实现接下来安装并引入matplotlib模块对提取后的数据进行可视化展示,matplotlib是Python第三方用来进行数据可视化的模块,这里我们使用折线图的形式进行展示。代码实现运行结果如图所示,我们可以对不同的折线进行不同的说明。图示清晰的描述了未来城市的天气情况。代码实现数据爬取与清洗简单介绍到这,本项目最终要实现爬取动物图片来制作数据集,所以接下来准备编写代码实现动物图像的数据爬取总结项目二:数据集准备数据持久化存储什么是数据库数据库分类数据库安装使用SQL语言简介DML操作DQL操作数据库是一个以某种有组织的方式存储的数据集合。通俗来说,数据库就是一种存储并管理数据使用的技术。什么是数据库在本项目中我们使用数据库的目的主要是将爬虫采集到的数据信息进行持久化存储,为后续神经网络的构建提供数据支持。什么是数据库数据库根据存储与管理数据的方式不同,我们可以将所有数据库分为两大类别:(1).关系型数据库(2).非关系型数据库数据库分类关系型数据库:关系数据库是由多个表组成的。每个表都是由行和列组成的。同样的,关系数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:关系数据库=多张表+各表之间的关系数据库分类非关系型数据库:非关系数据库又称为NoSQL。NoSQL仅仅是一个概念,泛指非关系型的数据库,他区别于关系数据库不以表结构形式存储数据,例如:键值存储数据库、图形存储数据库、文档型数据库都可以称为非关系型数据库。数据库分类本项目中产生的数据大都是结构化数据,例如我们需要将爬取到的动物图像进行存储,那么每张图片我们都需要存储编号、图像种类、图像地址等固定信息,这时我们首选使用关系型数据库,而关系型数据库中最典型的就是MySQL数据库。数据库分类以Window系统为例,想要使用MySQL数据库完成表结构的创建和数据的增删改查操作,需要在计算机中安装MySQL服务。同时为了保证可视化操作,我们需要额外安装Navicat工具辅助我们操作数据库,具体安装流程可见“附录-数据库安装流程”,使用流程大致如下。数据库安装使用数据库安装使用1.计算机中安装MySQL服务2.计算机安装Navicat开发工具3.使用Navicat连接数据库创建表4.编写SQL代码实现数据增删改查操作根据附录安装流程安装完MySQL和Navicat后,我们可以在指定数据库中新建表结构,声明表名、类型、长度等信息,具体可参考微课视频--“表结构的创建和使用”。数据库安装使用SQL语言:结构化查询语言(StructuredQueryLanguage)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL语言简介根据SQL语言使用场景不同,SQL语言可以分为五种语法: (1).DML语法:数据操作语言,包含:insert、update、delete

(2).DQL语法:数据查询语言,包含:select

(3).DDL语法:数据定义语言,包含:create、drop、alter、truncate (4).DCL语法:数据控制语言,包含:grant、revoke(主要用于权限操作) (5).DTL语法:数据事务语言,包含:commit、rollbackSQL语言简介DML语法全称为DataManipulationLanguage,数据操作语言。主要用于操作数据库实现数据的增删改操作,项目开发中我们需要将爬取到的动物图像信息存储到数据库中,在Navicat中新建查询,在查询窗口中可以编写SQL语句,具体语法如下所示。DML操作Insert操作:用于向数据库中插入一条或者多条数据记录。以customer表为例,表结构如图所示。DML操作单行添加:一个SQL语句添加一行记录DML操作批量添加:一个SQL语句添加多行记录DML操作Update操作:用于修改数据库中已有数据的指定列信息。DML操作条件修改:修改符合条件数据的某一列信息DML操作Delete操作:用于删除表中符合条件的一行或者多行数据DML操作DQL全称DataQueryLanguage,数据查询语言。主要用户将数据库中的数据按照指定条件进行检索最终呈现给用户。本项目中我们需要将动物图像存储在数据库中后,使用查询语法将动物图像检索后进行后续数据集的制作和神经网络的构建。DQL语法大致可以包含如下内容。DQL操作DQL操作无条件查询

有条件查询

分组查询

多表查询

模糊查询

子查询以模糊查询为例,模糊查询又称为关键字查询,即:查询条件中含有指定信息的数据内容,一般可用于商城的搜索功能。DQL操作总结本节介绍了数据持久化技术--MySQL数据库的基本使用和操作流程,更多代码可以参考代码案例中的DML操作、DQL操作。数据库总结项目二:数据集准备图像数据标注与数据集制作数据标注简介Opencv简介Opencv图像标注数据集简介数据集制作代码演示数据标注是对未经处理的初级数据包括语音、图片、文本、视频等进行加工处理并转换为机器可识别信息的过程。换言之,就是从互联网上抓取、收集数据包括文本、图片、语音等等然后对抓取的数据进行整理与标注。数据标注简介我们了解到的数据标注其实就是人工智能的重要组成部分之一,人工智能组成部分有三个,分别是:算法、算力、标注。算力相当于看书需要眼睛,算法相当于需要大脑思考,标注相当于书里面的知识。有了数据,AI才能用算法+算力辨别场景进行工作。数据标注简介OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它实现了图像处理和计算机视觉方面的很多通用算法。Opencv简介有多种原因使得我们需要对图像或视频进行标注,使用OpenCV可以使得标注变得直接和简单。你可以使用它:在演示图像中添加相关信息;在物体检测中使用方框标注目标物体;在图像分割中使用不同颜色来加亮图像像素;Opencv简介在OpenCV中调用circle()函数,对应的语法为:circle(image,center_coordinates,radius,color,thickness)就像大多数OpenCV中的函数一样,第一个参数为图像;接下来两个参数定义了圆的中心坐标以及它的半径;最后两个参数说明圆的颜色和宽度;接下来我们以代码的形式展示一下标注的具体流程。Opencv图像标注Opencv图像标注以此图像为例,现在我们需要标识小狗脸部的位置首先通过opencv提供的imread方法加载图像,然后设置标注的位置以及圆形的半径。通过circle函数将圆圈标注在指定位置即可Opencv图像标注运行结果如图所示,小狗的脸部已经被红色的圆圈标注,这个功能在以后根据动物身体局部特征进行分类识别的时候十分有效。Opencv图像标注数据集,又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。数据集简介在整个训练(学习)流程中,数据集一般分为三组:训练集、验证集、测试集数据集制作训练集用于训练模型参数(权重和偏置量),验证集用于确定模型超参数(网络层数、隐藏层层数、训练轮数等),测试集用于评估模型。数据集制作以猫狗图像数据集制作为例,演示局部的代码操作。设置函数将指定路径下的所有图像的路径读取后存储到Python列表中,方便接下来加载图像代码演示设置函数根据图像的路径加载图像,并统一设置图像的大小,方便后续对图像进行归一化操作。根据加载好的图像信息,将图像进行分割,划分为训练集和测试集,一般按照7:3的比例划分。代码演示将训练集和测试集的图像进行归一化操作(输入图像每个像素值范围是0到255之间的数值,对于计算机来说这个数值太大了,所以像素值归一化处理一般是将像素值除以255,得到0到1之间的数值来进行计算)代码演示总结在最后对数据集进行数学操作的过程中使用到了pandas模块,该模块主要提供了数据运算和数据变换的常用方法,配合matplotlib进行数据可视化,这部分会在微课视频中详细进行介绍。数据集总结谢谢浏览项目三:动物识别模型开发模型开发环境搭建项目情境Anaconda简介开发环境搭建我们将如何编写一个软件来识别图像中的狗和猫之间的区别?创建算法来区分猫和狗的图片并不直观或不明显。因此,与其尝试构建一个基于规则的系统来描述每个类别(狗与猫)的“外观”,我们还可以采用数据驱动的方法,提供每个类别的外观特征,然后我们用特征识别不同类别之间的差异。项目情境我们将这些示例称为标记图像的训练数据集,其中训练数据集中的每个数据点包括:一个图像、图片的标签/类别(即狗、猫、熊猫等)同样,重要的是这些图像中的每一个都有与之相关的标签,因为我们的监督学习算法需要看到这些标签来“自学”如何识别每个类别。本节先通过演示开发环境的搭建,后续再针对神经网络和模型训练进行展开讲解。项目情境Anaconda就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。通俗来说,我们在通过Pycharm进行深度学习开发时,经常需要下载并引入很多第三方资源库,如果我们直接引入Anaconda环境,可以省去反复下载第三方资源库的流程。Anaconda简介输入网址/products/distribution进入官方网站,点击下载Anaconda运行环境。开发环境搭建Anaconda下载打开下载完毕的安装文件,进入安装窗口后,点击Next进行下一步操作。开发环境搭建Anaconda安装本界面会显示关于Anaconda的协议和使用规则,这里直接选择IAgree即可。开发环境搭建Anaconda安装选择JustMe,只为此电脑安装Anaconda开发环境,点击Next进行下一步操作。开发环境搭建Anaconda安装点击Browse选择Anaconda的安装路径,默认在C盘下安装,建议选择其他盘符进行安装,设置好安装路径后,点击Next进行下一步操作。开发环境搭建Anaconda安装默认勾选RegisterAnaconda3asmydefaultPython3.9,这里直接点击Install安装即可。开发环境搭建Anaconda安装进入安装界面后,需要3~5分钟进行环境设置,等待Anaconda安装完毕。开发环境搭建Anaconda安装等待安装完毕后,点击Next进行下一步操作。开发环境搭建Anaconda安装此窗口介绍了一下Anaconda建议配合Jupyter一起使用,并提供了DataSpell开发工具的下载链接,这里直接点击Next进行下一步操作。开发环境搭建Anaconda下载安装完毕后,点击Finish即可,接下来我们需要测试一下Anaconda是否安装成功。开发环境搭建Anaconda下载点击左下角开始菜单,找到Anaconda3(64-bit)文件夹下的AnacondaNavigator选项,点击打开Anaconda可视化窗口界面。开发环境搭建Anaconda测试如果成功显示图示的Anaconda窗口则表示Anaconda正式安装成功,接下来我们需要将Anaconda引入到Pycharm开发工具中。开发环境搭建Anaconda测试点击Pycharm开发工具左上方File选项,选择Settings设置,打开设置窗口。开发环境搭建引入Anaconda环境设置窗口中找到Project选项,点击下方的PythonInterpreter选项,在窗口右上方选择齿轮标志点击。开发环境搭建引入Anaconda环境点击后选择Add添加Python运行环境。开发环境搭建引入Anaconda环境选择ExistingEnvironment,点击右侧按钮选择Anaconda运行环境的文件。开发环境搭建引入Anaconda环境这里选择Anaconda安装目录下的Python.exe安装文件,点击ok选择即可。开发环境搭建引入Anaconda环境设置好Anaconda的开发环境路径后,直接点击ok即可,等待1分钟后,Pycharm即可成功导入Anaconda环境,后续很多第三方库都可以直接从Anaconda中引入。开发环境搭建引入Anaconda环境本节介绍了深度学习对动物图像进行识别的基本原理和大致流程,并且详细介绍了Anaconda环境的下载、安装以及引入流程,为后续章节的内容提供了铺垫,更利于后续内容的正常展开总结项目三:动物识别模型开发前馈神经网络DNN初识神经网络简介神经网络构成激活函数前馈神经网络前向传播算法反向传播算法人工神经网络:ArtificialNeuralNetwork,ANN简称神经网络(NeuralNetwork,NN),神经网络具有如下特点:模仿生物神经网络(特别是大脑)的结构和功能;是一种数学模型或计算模型,用于对函数进行估计或近似;具备学习功能,能够通过外接信息改变内部结构,是一种自适应系统。神经网络简介神经元是神经网络的重要组成部分,神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。神经元模型多个神经元并列组成神经网络层,多个层互连组成神经网络模型;神经网络由输入层(inputlayers)、隐藏层(hiddenlayers)、输出层(outputlayers)组成。通常中间隐藏层的层数需要进行调整,一层或多层。每根连接线在神经网络经过训练后拥有自己的权重神经网络定义神经网络构成如下左图所示,另一种常见的表达形式是从下到上表示一个神经网络。输入层在图的最下方,输出层则在图的最上方,如下右图所示。神经网络构成没有激活函数的神经网络,无论多少层,最终结果都只是输出的线性组合。神经元加入激活函数后,深层的神经网络可以逼近模拟任何非线性函数。通俗来说,就是让程序学会多元化处理数据信息。常用的激活函数有:sigmoid函数,tanh函数,Relu函数,softmax函数等等激活函数前馈神经网络也叫做多层感知机,是经典的深度学习模型,前馈神经网络中以上一层输出作为下一层输入,网络中无回路,输入的信息总是向前传播的,在神经网络训练过程中,输入层/输出层节点数通常固定,隐藏层节点数根据网络效果调节。神经网络结构在训练过程中的重点在于神经元之间的连接线的权重的确定。前馈神经网络前馈神经网络图示即为一个简单的前馈神经网络结构,其包含一个输入层,一个输出层,两个隐藏层每个神经元(除输入层外)接收多个输入,神经网络接收到一个输入(单个矢量)。每个隐藏层由一组带权重和偏置的神经元组成组成,每个神经元完全连接到前一层的所有神经元,对它们进行加权求和,将值传递给一个激活函数得到输出作响应,单层神经元完全独立运行,不共享任何连接。输出层在分类模型中,神经元值表示类别分数(分数越高,表示对应类别概率越大),图示为前馈神经网络整体架构。前馈神经网络前馈神经网络中设计隐藏层的好处就是为了提高训练效果,靠增加隐层节点数来获得较低的误差,比增加隐层数更容易实现。没有隐层的神经网络模型,实际上就是一个线性或非线性回归模型。隐藏层的节点数量设计通常与以下四种情况有关:输入/输出层的节点数、需解决的问题的复杂程度、激活函数的型式、样本数据的特性等、隐藏层设计前向传播算法可以理解为输入值到神经网络中,经过隐藏层的每个节点加权和计算,信息逐渐从输入层传递到输出层。但是传统算法中,计算后的结果为线性结果,不管它怎么组合,最后得到的分类器本质还是一个线性方程,处理不了的非线性问题。前向传播算法所以这时需要引入激活函数,引入激活函数的意义就是增加神经网络模型的非线性,图示就是引入激活函数后的情况。前向传播算法用网络推导的结果和正确结果计算得到误差值,再使用误差值反向更新神经网络每一层的权重参数和偏置参数,以期得到网络的最小误差,这就是反向传播算法。让正向传播和反向传播不断的往复进行,不断更新网络参数,最终使网络能够逼近真实的函数关系。在前馈网络中使用反向传播算法,通常称之为BackPropagationNetwork,简称BP网络,BP网络通常具有一层或多层隐含层,BP网络使用的反向传播算法核心规则是梯度下降算法。因此它的激活函数必须是处处可微的。反向传播算法反向传播算法的推理流程和运行原理如图所示。反向传播算法项目三:动物识别模型开发搭建基于DNN的动物识别任务需求项目开发项目总结本节我们将通过加载已有的数据集,搭建DNN前馈神经网络对指定猫的图片进行识别并返回预测识别结果,来简单了解一下DNN识别动物的全流程。任务需求引入搭建DNN神经网络的相关模块,其中lr_utils和dnn_utils为预先下载好的工具文件,用于设定激活函数和加载数据集使用。开发环境搭建模块导入加载完数据集后,将数据集分为训练集和测试集,然后分别输出训练集和测试集的数据信息。项目开发数据集测试测试结果如图所示,训练样本和测试样本的比例大约是4比1,每张图片的大小是固定的,维度中的3表示每个像素点由三原色(R,G,B)构成项目开发数据集测试结果对像素进行归一化处理,因为在深度神经网络训练时一般使用较小的权重值来进行拟合,而当训练数据的值是较大整数值时,可能会减慢模型训练的过程。如果我们在将图像输入到神经网络之前对图像做像素值归一化的处理,即将像素值缩放到0-1之间,就能够避免很多不必要的麻烦。项目开发像素归一化设置函数initialization用于返回神经网络的参数,参数通过随机数生成,为了防止参数范围过大,将随机结果乘0.1处理。项目开发设置随机参数设置函数linear_forward进行前向传播的线性处理,同时为了解决非线性问题,还需要引入激活函数进行非线性处理。项目开发前向传播自定义函数linear_backward进行反向传播处理,对数据结果进行线性处理。项目开发反向传播线性处理设置自定义函数引入激活函数对结果进行非线性处理。项目开发反向传播激活处理设置自定义函数用于构建两层神经网络项目开发设置循环反复进行前向传播和反向传播处理,这里设置两种激活函数,分别进行不同的操作,最终将反向传播后的数据存储到grads列表中。项目开发设置前向/反向传播反复更新参数减少样本误差,保证预测准确率。项目开发更新参数定义函数进行预测,调用L_model_forward传入参数接受预测结果,然后将预测结果求和后计算平均值并输出。项目开发预测通过图示结果可以看出经过反复迭代,设置不同参数进行训练后,预测的准确度是非常高的。项目开发预测结果展示调用自定义函数predict传入测试集数据进行反复测试。完成最终的模型评估。项目开发测试集测试传入指定图像信息,调用predict函数完成最终预测,实现动物图像识别项目开发图像识别测试总结如果出现扔非猫图,识别出是猫图的情况,不要慌张,对于这个数据集来说,即使在训练集和开发/测试集上有较好的效果,事实上在我们真正的测试集上(用户上传的图片)精度是完全达不到的!项目总结项目三:动物模型开发卷积神经网络CNN初识什么是神经网络梯度下降算法反向传播算法什么是卷积什么是池化LeNet-5网络详解主要内容什么是神经网络机器学习,神经网络,深度学习之间的关系如图所示,三者之间是存在包含关系的机器学习神经网络深度学习CNN/RNN神经网络概述人工神经网络(Artificialneuralnetwork,ANN),简称神经网络(NN)。神经网络其实就是按照一定规则连接起来的多个神经元,图示为一个全连接神经网络的构建过程。梯度下降算法梯度下降算法是用来求函数最小值的算法,在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(GradientDescent)是最常采用的方法之一,另一种常用的方法是最小二乘法。主要用于优化单个参数的取值。每次沿着梯度的反方向,即函数值下降最快的方向,去进行迭代,就能走到函数的最小值附近(之所以是最小值附近而不是最小值那个点,是因为我们每次移动的步长不会那么恰到好处,有可能最后一次迭代走远了越过了最小值那个点)梯度下降算法梯度下降算法的公式与原理如图所示。反向传播算法反向传播算法是计算多层复合函数的所有变量的偏导数的利器,它可以根据定义好的损失函数(梯度下降算法)优化神经网络中参数的取值,从而使神经网络模型在训练数据集上的损失函数达到一个较小值。采用反向传播算法求一阶导数可以满足一般神经网络优化的需求。反向传播算法公式如图所示。

下图展示了卷积的过程,卷积降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。其中黄色部分是卷积核,卷积核宽度为3,卷积的操作就是利用卷积核中每一个数字(权重)去乘输入图像中3*3区域内对应的值,然后求和得到一个新的结果。什么是卷积下图展示了卷积的全过程,例如:使用卷积核扫描左上方3*3图像,卷积核中每个数据和输入图像中的每个对应位置相乘求和,最终计算平均值进行输出。卷积过程卷积层工作原理上图为卷积的计算公式,第一个公式表示计算卷积后的图像宽度。W2表示卷积后输出的特征图宽度;W1是卷积前图像的宽度;F是卷积核宽度;P是填充数量,有的时候如果输入图像宽度太小,我们往往会在图像外侧填充几圈0,如果P的值是1,那么就补充1圈0,如果不需要补充,则P为0;S是步长,即卷积核扫描的步幅,一般设置为1。第二个公式表示计算卷积后的图像的高度,原理同第一个公式。课堂提问如图所示,以计算卷积后输出图像的宽度为例。如果输入图像的宽度为10,卷积核宽度为3,没有向输入图像的周围填充0,卷积的步长为1,即:第一次对左上角3*3区域卷积,第二次卷积向右推进一格继续扫描3*3区域,请问卷积后的宽度是多少?答案:8个宽度池化层主要的作用是下采样,通过去掉特征图中不重要的样本,进一步减少参数数量。池化的方法中最常用的是最大池化和均值池化。最大池化实际上就是在n*n的样本中取最大值,作为采样后的样本值,而平均池化就是提取样本中的平均值,作为采样后的样本值。下图为展示最大池化的工作原理。什么是池化LeNet-5诞生于1994年,是最早的深层卷积神经网络之一,推动了深度学习的发展。从1988年开始,在多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet-5。最初被用于手写数字识别,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。接下来我们分析一下它的工作原理。LeNet-5网格根据下图的内容,可以看出共包含8层网络,分别为:输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全连接层(F6)、输出层(径向基层)LeNet-5网格1.INPUT层:输入层是一个32x32大小的图像LeNet-5网格2.C1层:假设卷积核的大小是5x5的,由于不考虑对图像的边界进行拓展,则卷积核将有28x28个不同的位置,也就是C1层的大小是28x28。这里设定有6个不同的C1层,每一个C1层内的权值是相同的。LeNet-5网格3.S2层:S2层是一个下采样层,即池化层。在LeNet-5系统中,下采样层比较复杂,由4个点下采样的加权平均为1个点。每个图层为14*14。池化是非线性下采样的一种形式,主要作用是通过减少网络的参数来减小计算量,并且能够在一定程度上控制过拟合。LeNet-5网格4.C3层:根据对前面C1层同样的理解,我们很容易得到C3层卷积后的大小为10x10。只不过,C3层的变成了16个10x10网络,有16个卷积核。LeNet-5网格如果S2层只有1个平面,那么由S2层得到C3就和由输入层得到C1层是完全一样的。但是,S2层由多层构成,所以这个流程需要按照一定的规则来组合这些层。具体的组合规则,在

LeNet-5系统中给出了下面的表格:简单的说,例如对于C3层第0张特征图,其每一个节点与S2层的第0张特征图,第1张特征图,第2张特征图,总共3个5x5个节点相连接。后面依次类推,C3层每一张特征映射图的权值是相同的。这种不对称的组合连接的方式有利于提取多种组合特征。LeNet-5网格C3层featuremapS2层featuremap5.S4层:S4层是在C3层基础上通过池化向下采样,前面已述。LeNet-5网格6.C5层:C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连,故C5特征图的大小为1*1,这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全连接层,是因为如果输入层规格变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。LeNet-5网格7.F6层:F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生节点的输出。LeNet-5网格8.输出层:输出层也是全连接层,共有10个节点,分别表示数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。LeNet-5网格本节总结在整个卷积神经网络中,卷积层和池化层的目的就是为了提取图像特征,减少参数样本的数量。全连接层则是在整个卷积神经网络中起到“分类器”的作用。在我们以后的工作中我们也可以运用这种思想对图片进行分类、识别等操作。在医疗、交通、教育等领域中有很广泛的应用。项目三:动物模型开发搭建基于CNN的动物识别模型机器如何识图卷积神经网络原理卷积层工作原理池化层工作原理全连接层工作原理代码展示主要内容机器如何识图通过对图像数字化处理,得到数字矩阵,如图所示卷积层工作原理卷积层的作用:就是提取图片每个小部分里具有的特征。假定我们有一个尺寸为6∗6的图像,每一个像素点里都存储着图像的信息。我们再定义一个卷积核(相当于权重),用来从图像中提取一定的特征。比如我们设计的一个卷积核如下左,想要识别出来的曲线如下右。卷积层工作原理现在我们用左侧的卷积核,来识别这个简化版的图片:一只漫画老鼠。卷积层工作原理当机器识别老鼠的屁股的时候,真实区域数字矩阵与卷积核相乘后,输出:6600。而用同一个卷积核,来识别老鼠的耳朵的时候,输出则很小:0。卷积层工作原理卷积层工作原理总结我们就可以认为现有的这个卷积核保存着曲线的特征,匹配识别出来了老鼠的屁股是曲线的。但是我们还需要其他特征的卷积核,来匹配识别出来老鼠的其他部分。卷积层的作用其实就是通过不断的改变卷积核,来确定能初步表征图片特征的有用的卷积核是哪些,再得到与相应的卷积核相乘后的输出矩阵。池化层工作原理池化层的输入就是卷积层输出的原数据与相应的卷积核相乘后的输出矩阵。最常见的两种池化层的形式均值池化:mean-pooling——选取指定区域内数值的平均值来代表整片区域。最大池化:max-pooling——选取指定区域内最大的一个数来代表整片区域。如上图所示:在4*4的数字矩阵里,以步长2*2选取区域。图左:以左上方2*2区域为例,将区域[1,2,3,4]中最大的值4池化输出;图右:以左上方2*2区域为例,将区域[1,2,3,4]中平均值5/2池化输出。池化层工作原理举例说明两种池化方式:(池化步长为2,选取过的区域,下一次就不再选取)全连接层工作原理卷积层和池化层的工作就是提取特征,并减少原始图像带来的参数。然而,为了生成最终的输出,我们需要应用全连接层来生成一个等于我们需要的类的数量的分类器。全连接层的工作原理和神经网络学习很类似,我们需要把池化层输出的张量重新切割成一些向量,乘上权重矩阵,加上偏置值,然后对其使用ReLU激活函数,用梯度下降法优化参数即可。本节总结在整个卷积神经网络中,卷积层和池化层的目的就是为了提取图像特征,减少参数样本的数量。全连接层则是在整个卷积神经网络中起到“分类器”的作用。在我们以后的工作中我们也可以运用这种思想对图片进行分类、识别等操作。在医疗、交通、教育等领域中有很广泛的应用。思考题最后给你留一道思考题,就是池化层的两种池化方式谁更优一些呢?项目三:动物模型开发动物识别模型的训练模型简介模型训练流程收集数据集拆分数据集训练神经网络评估神经网络在人工智能中,面对大量用户输入的数据/素材,如果要在杂乱无章的内容准确、容易地识别,输出我们期待输出的图像/语音,并不是那么容易的。因此算法就显得尤为重要了。算法就是我们所说的模型。模型简介图示就是构建模型,对输入的数据进行训练后,得到预测结果的流程图。模型训练流程当然,算法的内容,除了核心识别引擎,也包括各种配置参数,例如:语音智能识别的比特率、采样率、音色、音调、音高、音频、抑扬顿挫、方言、噪音等乱七八糟的参数。成熟的识别引擎,核心内容一般不会经常变化的,为实现”识别成功”这一目标,我们只能对配置参数去做调整。对于不同的输入,我们会配置不同参数值,最后在结果统计取一个各方比较均衡、识别率较高的一组参数值,这组参数值,就是我们训练后得到的结果,这就是训练的过程,也叫模型训练。深度学习模型训练的流程大致可以分为如下四个步骤。模型训练流程构建深度学习网络的第一个组成部分是收集我们的初始数据集。我们需要图像以及与每个图像相关的标签。这些标签应该来自一组有限的类别,例如:类别=狗、猫、熊猫、大象等此外,每个类别的图像数量应该大致均匀(即每个类别的示例数量相同)。如果我们的猫图像数量是狗图像的两倍,熊猫图像的数量是猫图像的5倍,那么我们的分类器自然会偏向于过度拟合这些代表性很强的类别。收集数据集现在我们有了初始数据集,我们需要将它分成两部分:一个训练集、一个测试集一个训练集是使用我们的分类,以“学习”每个类别并通过输入数据预测,然后自行纠正错误的预测。分类器经过训练后,我们可以评估在测试集上的表现。这是非常重要的是,训练集和测试集是相互独立和不重叠!如果我们将测试集用作训练数据的一部分,那么我们的分类器就具有不公平的优势,因为它之前已经看过测试示例并从中“学习”了。相反,我们必须将此测试集与我们的训练过程完全分开,并仅将其用于评估我们的网络。训练集和测试集的常见拆分大小包括66.6%,33%、75%,25%和90%,10%。拆分数据集训练集和测试集的功能如图所示,通过对训练集中的数据进行训练提取特征模型,然后用测试集中的图像进行误差率测试。拆分数据集这些数据如此拆分是有道理的,但是如果有要调整的参数怎么办?神经网络有许多例如,学习率、衰减、正则化等需要对其进行调整以获得最佳性能。我们将这些类型的参数称为超参数。拆分数据集但是我们思考一下,如果数据集仅仅分为训练集和测试集,那么我们通过修改一些超参数(不能通过学习来自动调整的参数)来降低误差,但是这种方法在实际中的应用效果却并没有想象的那么好。这是因为超参数都是基于测试集来调整的,就相当于把测试集当成了训练超参数的数据。这样对于新的数据效果不一定会更好。于是就想出一种解决办法,即保留一个数据集作为验证集,在这些步骤做完之后再进行最终的验证。拆分数据集训练集、验证集和测试集的工作流程如下图所示,可以很明显看到训练集用于训练模型,验证集用于调节超参数,而测试集就只是用于评估模型好坏的。拆分数据集给定我们的训练图像集,现在可以训练我们的神经网络。这里的目标是让我们的神经网络学习如何识别我们标记数据中的每个类别。当模型出错时,它会从这个错误中学习并改进自己的模型参数。我们在后续的案例中会详细讲解如何训练神经网络中的数据。训练神经网络最后,我们需要评估训练好的神经网络。对于我们测试集中的每个图像,我们将它们呈现给神经网络并要求它预测它认为图像的标签是什么。然后,我们将模型对测试集中图像的预测制成表格。最后,将这些模型预测与我们测试集中的真实标签进行比较。真实标签代表图像类别。从那里,我们可以计算我们的分类器得到正确预测的数量,并计算聚合报告,如精度、召回率和f度量,这些报告用于量化我们网络的整体性能。评估神经网络不可避免地,在训练集上训练一个深度学习网络,在测试集上对其进行评估时发现它获得了很高的准确率,然而将其应用于训练集和测试集之外的图像,结果发现预测结果表现不佳。这个问题称为泛化,若神经网络模型没有正常识别或者训练不理想,我们需要考虑训练数据集是否准确反映了这些变化因素的示例?如果没有,我们将需要收集更多的训练数据以及调整神经网络的各种超参数。以上就是我们搭建深度学习神经网络模型的几个步骤。泛化项目三:动物模型开发动物识别模型的优化项目三:动物模型开发动物识别模型的优化模型优化的意义训练和泛化误差K折交叉验证过拟合和欠拟合梯度消失常见问题解决机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢?因为存在着训练误差和泛化误差。模型优化的意义训练误差:指模型在训练数据集上表现出的误差。泛化误差:指模型在任意⼀个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。训练误差的期望小于或等于泛化误差。也就是说,⼀般情况下,由训练数据集学到的模型参数会使模型在训练数据集上的表现优于或等于在测试数据集上的表现。由于无法从训练误差估计泛化误差,⼀味地降低训练误差并不意味着泛化误差⼀定会降低。所以机器学习模型应关注降低泛化误差。训练和泛化误差由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。⼀种改善的方法是K折交叉验证(K-foldcross-validation)。在K折交叉验证中,我们把原始训练数据集分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每⼀次,我们使⽤⼀个⼦数据集验证模型,并使用其他K−1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。K折交叉验证图示为K交叉验证的具体流程,通俗来说,交叉验证就是每一次都将不同的数据集当做测试集对模型进行测试,最后取误差平均值当做最终结果,这么做可以减小误差。是模型调优的一个重要手段。K折交叉验证欠拟合:模型无法得到较低的训练误差。过拟合:是模型的训练误差远小于它在测试数据集上的误差。应对欠拟合和过拟合的⼀个办法是针对数据集选择合适复杂度的模型。见下图所示。欠拟合和过拟合图示为常见的防止过拟合以及防止欠拟合的方式,其中比较常用的就是减少或者加大模型参数来控制拟合情况。欠拟合和过拟合训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,也就是你训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。本质上,梯度消失和爆炸是一种情况。在深层网络中,由于网络过深,如果初始得到的梯度过小,或者传播途中在某一层上过小,则在之后的层上得到的梯度会越来越小,即产生了梯度消失。梯度爆炸也是同样的。一般地,不合理的初始化以及激活函数,如sigmoid等,都会导致梯度过大或者过小,从而引起消失/爆炸。梯度消失/梯度爆炸防止梯度消失/梯度爆炸的常见解决方案如下:1.预训练加微调:其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。梯度消失/梯度爆炸2.梯度剪切、正则:梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。梯度消失/梯度爆炸3.ReLu、leakReLu等激活函数:ReLu:其函数的导数在正数部分是恒等于1,这样在深层网络中,在激活函数部分就不存在导致梯度过大或者过小的问题,缓解了梯度消失或者爆炸。同时也方便计算。当然,其也存在存在一些缺点,例如过滤到了负数部分,导致部分信息的丢失,输出的数据分布不在以0为中心,改变了数据分布。leakrelu:就是为了解决relu的0区间带来的影响,其数学表达为:leakrelu=max(k*x,0)其中k是leak系数,一般选择0.01或者0.02,或者通过学习而来。梯度消失/梯度爆炸1.解决训练样本少的问题利用预训练模型进行迁移微调(fine-tuning),预训练模型通常在特征上拥有很好的语义表达。此时,只需将模型在小数据集上进行微调就能取得不错的效果。数据集进行下采样操作,使得符合数据正态分布。使用数据集增强、正则或者半监督学习等方式来解决小样本数据集的训练问题。常见问题解决2.如何提升模型的稳定性?正则化(L2,L1,dropout):模型方差大,很可能来自于过拟合。正则化能有效的降低模型的复杂度,增加对更多分布的适应性。前停止训练:提前停止是指模型在验证集上取得不错的性能时停止训练。这种方式本质和正则化是一个道理,能减少方差的同时增加的偏差。目的为了平衡训练集和未知数据之间在模型的表现差异。扩充训练集:正则化通过控制模型复杂度,来增加更多样本的适应性。特征选择:过高的特征维度会使模型过拟合,减少特征维度和正则一样可能会处理好方差问题,但是同时会增大偏差。常见问题解决3.改善模型的思路数据角度:增强数据集。无论是有监督还是无监督学习,数据永远是最重要的驱动力。更多的类型数据对良好的模型能带来更好的稳定性。对模型来说,“看到过的总比没看到的更具有判别的信心”。调参优化角度:超参数调整本身是一个比较大的问题。一般可以包含模型初始化的配置,优化算法的选取、学习率的策略以及如何配置正则和损失函数等等。训练角度:在越大规模的数据集或者模型上,诚然一个好的优化算法总能加速收敛。所以在改善模型上充分训练永远是最必要的过程。常见问题解决总结本节主要介绍了模型在训练过程中以及训练完毕后可能出现的一系列问题和解决方案,保证最终在模型存储时,模型的算法是最优的,这样才能提高预测的准确率。总结项目三:动物模型开发动物识别模型的保存模型保存意义模型保存方式模型种类H5模型CKPT模型PB模型我们都知道在训练过程中,模型是非常重要的,训练好的模型可以用来对数据进行分类预测,因此,我们需要对经过千幸万苦训练好的模型进行保存,方便后续载入模型进行数据的分类预测。模型保存意义在对训练好的模型进行保存时,一般会使用两种方式,一种是tensorflow版的保存,还有一种是keras版的模型的保存。两种方式的代码虽然不同,但是核心思想是一致的。接下来,演示一下两种方式的模型保存代码案例。模型保存方式图示为Tensorflow模式下模型保存的代码,通过tf.train.Saver()函数获取模型保存器对象,然后通过调用对象提供的save方法将训练好的模型保存到ckpt格式的文件中。模型保存方式图示为Keras框架中保存并载入模型的代码。直接通过model.save即可将模型保存到指定路径下,这里使用的是.h5格式的模型文件。模型保存方式模型在保存时根据使用的深度学习框架不同以及数据结构不同,往往需要使用不同的文件类型进行存储,常见的文件种类有:CKPT格式H5格式PB格式PKL格式本项目中主要使用H5格式的文件进行模型的存储模型种类HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式,是一种存储相同类型数值的大数组的机制。HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF可以表示出科学数据存储和分布的许多必要条件。HDF文件在进行存储是会以.h5的形式进行存储,所以H5模型又称为HDF5模型,一个HDF5文件就是一个由两种基本数据对象(groupsanddatasets)存放多种科学数据的容器。H5模型⼀般情况下,用TensorFlow时保存模型都使用ckpt格式的模型文件但是这种方式有几个缺点:1.这种模型文件是依赖TensorFlow的,只能在其框架下使用。2.在恢复模型之前还需要再定义一遍网络结构,然后才能把变量的值恢复到网络中。CKPT模型⾕歌推荐的保存模型的⽅式是保存模型为PB⽂件。PB格式的优点如下:1.它具有语⾔独⽴性,可独⽴运⾏,封闭的序列化格式,任何语⾔都可以解析它,它允许其他语⾔和深度学习框架读取、继续训练和迁移TensorFlow的模型。2.它的主要使⽤场景是实现创建模型与使⽤模型的解耦,使得在推理过程中不⽤像ckpt格式那样重新定义⼀遍⽹络。3.保存BP⽂件的时候,模型的变量都会变成固定的,导致模型的⼤⼩会⼤⼤较少,适合在⼿机端运⾏。PB模型总结本节我们讲解了如何将训练好的模型进行存储,这对后续载入模型,并对指定数据进行预测分类提供了很大的帮助。模型保存总结谢谢浏览项目四:模型调用服务端开发服务端环境搭建Django简介环境搭建MTV核心思想Django是一个Web框架Django是一个产品级框架,支撑全球近万个网站及云端采用MTV(Model-Template-View)模型组织相比其他框架,Django充分利用Python特点,开发效率更高Django简介Django简介浏览器HTTPWSGI数据库HTML/CSS/JS等文件Web服务器接口路由URLs功能处理逻辑Web框架是一个建设Web应用的半成品,其架构如所示。Django简介在互联网云端开发中,Django可以理解为构建项目的工具Web框架前端技术云端接口

Web服务器业务逻辑数据库HTMLCSS

JavaScriptJSONAJAX

RESTfulApacheNginx

TomcatDjangoTornadoFlask

PyramidPythonMySQLPostgresQLMongo

Sqlite环境搭建使用Pycharm创建新的项目-->选择Django工程(自定义项目路径即可)环境搭建进入Pycharm后,首次进入会下载相关Django插件,启动较慢,进入工程后,工程会内置几个配置文件环境搭建在项目中创建APP,一个APP相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也有联系环境搭建选中当前项目,点击Pycharm上方Tools选项,选择Runmanage.pyTask选项,在下方窗口中输入startapptest1指令用于创建名为test1的app,此时项目下会生成一个名为test1的文件夹,接下来即可开始步入开发的旅程中!环境搭建【修改工程】修改应用的views.pyviews.py中包含对某个HTTP请求(url)的响应#Createyourviews

here.fromdjango.httpimport

HttpResponsedef

hello(request):returnHttpResponse("HelloWorld!Iam

coming...")环境搭建【修改工程】修改URL路由在urls.py中指定URL与处理函数之间的路径关系fromdjango.contribimport

adminfromdjango.urlsimportpathfromhelloappimport

viewsurlpatterns=

[path('index/',views.hello),path('admin/',

admin.site.urls),]环境搭建【修改工程】修改URL路由在urls.py中指定URL与处理函数之间的路径关系path('index/',

views.hello)某个URL 某个处理函数路由:URL与处理函数的关联环境搭建点击Pycharm右上方的运行按钮即可启动服务,在下方控制台中即可显示当前服务的访问网址环境搭建在浏览器中输入指定网址后即可访问Django框架写好的内容MTV核心思想Web云端系统的三个通用功能需求Web云端系统Web展示控制逻辑数据组织MTV核心思想MTV开发模式M:Models

模型T:Templates

模板V:Views

视图针对请求选取数据的功能选择哪些数据用于展示,指定显示模板,每个URL对应一个回调函数与数据组织相关的功能组织和存储数据的方法和模式,与数据模型相关的操作与表现相关的所有功能页面展示风格和方式,与具体数据分离,用于定义表现风格MTV核心思想HTTP数据库Web服务器接口路由URLsWeb框架viewsmodelstemplatesMTVHTML/CSS/JS模板 等文件语言WSGI三者之间的工作流程如下图所示MTV核心思想MTV模块职责划分如图所示M:Models

模型针对某个app的模型(M)针对某个app的视图(V)路由:Web框架的一部分V:Views

视图 T:Templates

模板模板(T)并不默认生成,需要手工创建目录总结本节主要介绍了Django框架的核心思想和环境搭建流程,后续关于Django的具体操作可以观看对应的微课视频。Django总结项目四:模型调用服务端开发模型调用环境搭建TensorFlow-serving工作流程TensorFlow-serving安装流程通过gRPC和RESTfullAPI两种方式同TensorFlow-serving端进行通信平时我们使用TensorFlow进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论