深度学习技术应用 课件 项目四:模型调用服务端开发_第1页
深度学习技术应用 课件 项目四:模型调用服务端开发_第2页
深度学习技术应用 课件 项目四:模型调用服务端开发_第3页
深度学习技术应用 课件 项目四:模型调用服务端开发_第4页
深度学习技术应用 课件 项目四:模型调用服务端开发_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

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

文档简介

项目四:模型调用服务端开发服务端环境搭建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进行模型的训练、验证和预测,但模型完善之后的生产上线流程,用到的技术可谓是五花八门。针对这种情况Google提供了TensorFlowServering,可以将训练好的模型直接上线并提供服务。TF-serving工作流程基于TFServing的持续集成框架基本分三个步骤:(1)模型训练:包括数据收集和清洗、模型的训练、评测和优化;(2)模型上线:将前一个步骤训练好的模型在TFServer中上线;(3)服务使用:客户端通过gRPC和RESTfullAPI两种方式同TFServering端进行通信,并获取服务;TF-serving工作流程TF-serving工作流程图示为官网给出的Tensorflow-Serving工作流程目前TFServing有Docker、APT(二级制安装)和源码编译三种方式,但考虑实际的生产环境项目部署和简单性,推荐使用Docker方式。TF-serving安装流程Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。因此,Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟Linux环境。关于Docker和虚拟机安装的流程可以参考微课视频进行操作。TF-serving安装流程通过docketpull命令准备TFServing的Docker环境TF-serving安装流程#dockerpulltensorflow/servingTFServing客户端和服务端的通信方式有两种(gRPC和RESTfullAPI),首先我们演示RESTfullAPI的形式通信。TF-serving通信形式RESTful:用URL定位资源、用HTTP动词(GET、POST、PUT、DELETE)描述操作。RESTfulAPI就是REST风格的API,即rest是一种架构风格,跟编程语言无关,跟平台无关,采用HTTP做传输协议。TF-serving通信形式下载官方示例代码:示例代码中包含已训练好的模型和与服务端进行通信的客户端(RESTfullAPI形式不需要专门的客户端)TF-serving通信形式#mkdir-p/tmp/tfserving#cd/tmp/tfserving#gitclone/tensorflow/serving运行TFServingTF-serving通信形式#dockerrun-p8501:8501\--mounttype=bind,\source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\target=/models/half_plus_two\-eMODEL_NAME=half_plus_two-ttensorflow/serving&客户端验证TF-serving通信形式#curl-d'{"instances":[1.0,2.0,5.0]}'\-XPOSThttp://localhost:8501/v1/models/half_plus_two:predict得到响应的数据结果TF-serving通信形式#{"predictions":[2.5,3.0,4.5]}接下来演示gRPC的通信形式,首先下载官方示例代码TF-serving通信形式#mkdir-p/tmp/tfserving#cd/tmp/tfserving#gitclone/tensorflow/serving模型编译TF-serving通信形式#pythontensorflow_serving/example/mnist_saved_model.pymodels/mnist运行TFServingTF-serving通信形式#dockerrun-p8500:8500\--mounttype=bind,source=$(pwd)/models/mnist,target=/models/mnist\-eMODEL_NAME=mnist-ttensorflow/serving客户端验证TF-serving通信形式#{"predictions":[2.5,3.0,4.5]}返回结果#Inferenceerrorrate:11.13%总结以前客户端和服务端的通信只支持gRPC。在实际的生产环境中比较广泛使用的B/S通信手段是基于RESTfullAPI的,幸运的是从TF1.8以后,TFServing也正式支持RESTfullAPI通信方式了。TF-serving总结项目四:模型调用服务端开发模型调用环境搭建项目四:模型调用服务端开发文件上传与接收HTTP协议Get和Post请求Django路由机制代码演示文件上传与接收总结超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。HTTP协议HTTP协议web浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。客户端(浏览器)向服务器提交HTTP请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET和POST。GET和POST请求GET和POST请求GET指的是从指定的资源请求数据。POST指的向指定的资源提交要被处理的数据。GET提交参数一般显示在URL上,POST通过表单提交不会显示在URL上,POST更具隐蔽性。我们每次在访问和使用互联网资源的时候其实都是在向服务器端发送请求,服务器根据请求中声明的网址来匹配对应的后台程序进行数据处理。而声明网址和后台处理数据的程序之间的匹配关系靠的就是路由Django的路由机制下图就是路由的基本工作原理,由客户端发送包含URL网址的请求,通过路由对请求中的数据进行提取、转换,最终将结果呈现到视图中。Django的路由机制URLviews定义、转换、传参、命名等Django的路由机制路由是关联URL及其处理函数关系的过程settings.py文件中ROOT_URLCONF变量指定全局路由文件名称Django使用urlpatterns

变量表示路由

(urls.py),该变量是列表类型,由

path()

re_path()

作为元素组成urlpatterns=

[path('msggate/',include('msgapp.urls')),path('admin/',

admin.site.urls),]ROOT_URLCONF

=

'<工程名称>.urls'

#

默认对应工程目录下urls.py文件Django代码演示views.py中声明函数用于接受用户在请求中发送的参数并将结果计算后响应给客户urls.py文件中声明path函数,设置请求URL和视图的关系,客户端通过getParam路径即可访问视图中的指定函数。Django代码演示启动项目,打开浏览器,在网址中输入:8000/

getParam?a=10&b=20可以看到服务端响应的数据结果。Django代码演示本项目中,我们需要采集用户上传的动物图像,利用神经网络对动物图像进行分析和预测,所以接下来演示一下如何通过Django框架实现文件的上传与接收文件上传与接收首先我们在templates目录下新建一个名为upload_file.html的网页文件。文件上传与接收在网页中声明如下代码,利用form表单将用户选中的文件进行上传,这里需要注意method必须声明为post提交形式。文件上传与接收表单主要作用:是用于显示、收集、提交用户信息到服务器上。表单一般由三部分构成:(1)表单标签:form(2)表单域:input、select、textarea(3)表单按钮:submit、reset文件上传与接收在views.py文件中声明下面的函数,其中render作用将模板和内容整合到一起,返回HTML网页中。文件上传与接收urls.py文件中添加路由,通过goUpload路径访问视图中的函数,并通过render返回到指定的模板网页中,呈现表单页面。文件上传与接收启动项目,打开浏览器输入:8000/goUpload/访问文件上传页面。单击选择文件即可选择指定图片进行上传。文件上传与接收点击选择文件按钮,选中指定图片后,点击upload,即可将表单中的图像信息发送到后端。文件上传与接收表单的提交路径是/uploadFile/,即:点击upload按钮后,程序会跳转到后端对应的view函数中,所以我们需要在urls.py文件中声明额外的路由路径。文件上传与接收urls.py文件中设置好views函数的访问路径,这样前端即可将图像提交至指定的后台程序文件上传与接收views.py文件中声明函数用于进行文件接收,首先读取表单上传的图像信息,然后将图像信息分段存储到本地设置好的路径中。例如:E盘的upload文件夹内文件上传与接收上传图片完成后,网页会显示uploadover,表示文件上传成功。我们可以在E盘的upload文件夹内看到上传的图像。文件上传与接收总结本节主要介绍了通过Django框架实现前后端的数据交互以及文件上传和接收,当接收到文件后,我们就可以基于动物图像的数据集对用户上传的图像进行预测。总结项目四:模型调用服务端开发文件上传与接收项目四:模型调用服务端开发动物图像处理案例概述开发环境说明环境搭建开发流程总结本节我们需要借助tensorflow搭建卷积神经网络通过对猫狗图像集的训练,最终构建模型对用户输入的图像进行识别。案例概述语言环境:Python3.10编译器:Pycharm深度学习环境:TensorFlow2.8开发环境说明首先我们需要在Pycharm中安装案例中需要的所有第三方模块,需要安装的模块主要有:tensorflow、keras、numpy、matplotlib等,具体需要什么模块可以在编写代码过程中自行引入。环境搭建环境搭建点击Pycharm左上方的File选项,选择settings打开设置窗口环境搭建选择Project选项中的ProjectInterpreter,点击右侧加号准备安装新的第三方模块。环境搭建在搜索框中搜索指定的第三方模块,点击下方InstallPackage即可完成下载,有些库是外网提供的,可能在下载过程中因为连接超时导致下载失败,重试几次即可开发流程首先导入matplotlib模块,该模块主要作用用于数据的可视化展示,可以通过图表实时查看模型训练状态。开发流程导入numpy模块,该模块用于对数据进行一维操作。导入tensorflow深度学习框架,用于后续神经网络的构建。开发流程在当前项目中新建一个train文件夹,将所有采集到的猫狗图像存储在该目录中,注意分为两个文件夹存储,然后通过代码设置数据集加载路径,通过输出语法可以查看数据集的数量。开发流程我们可以通过输出语句看到,文件夹内我们共准备了25000张猫狗图片当做数据集,其中猫狗图片数量各位12500张。开发流程通过keras框架提供的image_dataset_from_direcotry函数加载指定目录下的图像数据集,对数据集进行划分,这里划分为训练集和验证集两种。开发流程我们可以通过class_names输出数据集的标签。标签将按字母顺序对应于目录名称。通过循环可以查看训练集的图像维度。开发流程通过输出结果我们可以看出,25000张数据集图像,其中有5000张被当做训练集,图像的标签分为cat和dog两种,图像的维度如下所示。开发流程定义函数preprocess_image对图像进行归一化处理,归一化就是指将在一定范围内的数值集合转换为0~1范围内。归一化的目的是控制输入向量的数值范围,不能过大或者过小。减少后续计算的复杂程度。开发流程接下来准备构建卷积神经网络对数据集数据进行特征提取,由于数据集数量比较大,这里共设置了5次卷积和池化。开发流程当五次卷积、池化操作完毕后设置两层全连接层将二维向量转换为一维向量,降低数据维度,然后保存模型,将模型数据返回。开发流程构建神经网络的过程中,每个卷积层、池化层输出数据的维度和特征图数量如图所示,我们可以看出,原始图像大小为224*224,随着卷积池化后,大小一直在变低。这个过程是在提取图像特征。开发流程通过compile方法对模型进行编译后,设置优化器与损失函数,接下来准备对模型进行评估,进一步提高预测的成功率。开发流程接下来开始,我们需要对编译后的模型进行评估和训练,降低损失率,提高验证正确率,这里只展示部分代码。开发流程训练过程的结果如图所示,训练过程会持续一段时间,但是loss的变化会随之越来越稳定,当loss趋于稳定后,模型基本训练完毕,接下来可以对模型进行评估。总结本节主要内容是代码演示,主要演示了数据集从数据处理、神经网络构建、模型编译、模型训练、模型评估等流程全方位展示了动物图像预测的准备环节。需要注意的是,模型训练过程中,由于数据量过大,所以对电脑性能有一定要求。总结项目四:模型调用服务端开发动物图像处理项目四:模型调用服务端开发模型调用方式一H5模型简介H5数据组织方式H5模型加载形式H5Py加载模型Keras加载模型代码案例H5模型全称为HierarchicalDataFormat分层数据格式,是一种二进制文件格式,表示多维数据集和图像的通用格式。H5模型简介h5是HDF5文件格式的后缀。用来存储,管理,交互数据。h5文件对于存储大量数据而言拥有极大的优势,使用h5文件来存储数据效率更高。H5模型简介h5文件中有两个核心的概念:组“group”和数据集“dataset”。一个h5文件就是“dataset”和“group”二合一的容器。h5数据组织方式dataset:简单来讲类似数组组织形式的数据集合,像numpy数组一样工作,一个dataset即一个numpy.ndarray。具体的dataset可以是图像、表格,甚至是pdf文件和excel。h5数据组织方式group:包含了其它dataset(数组)和其它group,像字典一样工作。  一个h5文件被像linux文件系统一样被组织起来:dataset是文件,group是文件夹,它下面可以包含多个文件夹(group)和多个文件(dataset)。h5数据组织方式h5数据组织方式上图可以理解为一个h5文件基本的数据组织形式h5模型加载的方式有很多,最常见的有两种:(1)通过h5py包对.h5进行加载操作(2)keras可以通过load直接加载.h5文件。h5模型加载形式下图为通过h5py包读取并输出h5模型中的数据信息,由于本项目中使用的是keras框架加载。所以此方式不做过多说明。h5Py加载模型Keras框架中对h5模型的操作主要分两种,一种是保存模型,一种是加载模型,对应代码如下:(1)保存模型model.save('**.h5')(2)加载模型new_model=tf.keras.models.load_model('**.h5')keras加载模型本节代码承接上一节内容,上一节已经将猫狗数据集模型训练完毕,我们可以通过可视化展示的方式,展示一下模型训练的过程,通过maplotlib可以进行折线图展示。代码案例这里是最终展示的结果,左图为训练集和测试集训练的准确率,右图为训练接和测试集的损失率,损失率趋于平稳说明训练完毕。代码案例最后通过模型对象提供的predict方法即可实现对指定图片的预测,结合Django框架后,这里会直接加载h5模型对用户上传的动物图像进行预测识别。代码案例总结本节主要介绍了如何通过Kreas对模型进行存储与加载,同时通过可视化展示的形式看到了模型训练的过程,后续在实际开发中,我们只要加载训练好的指定模型即可完成猫狗图像的预测识别。总结项目四:模型调用服务端开发模型调用方式一项目四:模型调用服务端开发模型调用方式二TF-Serving简介TF-Serving工作原理代码案例TensorFlow训练好的模型以tensorflow原生方式保存成h5文件后可以用许多方式部署运行。TF-Serving简介例如:通过tensorflow-js可以用javascrip脚本加载模型并在浏览器中运行模型。通过tensorflow-lite可以在移动和嵌入式设备上加载并运行TensorFlow模型。TF-Serving简介例如:通过tensorflow-serving可以加载模型后提供网络接口API服务,通过任意编程语言发送网络请求都可以获取模型预测结果。TF-Serving简介本节我们主要介绍通过grpc形式建立与tensorflow-serving的连接并调用tensorflow-serving提供的模型进行简单预测。TF-Serving简介TensorFlowServing是针对机器学习模型灵活且高性能的服务系统,专为生产环境而生。TensorFlowServing提供与TensorFlow模型的现成集成,但可以轻松扩展,以便服务于其他类型的模型和数据。TF-Serving工作原理Tensorflow-serving具备的特性如下:可以同时服务多个模型或相同模型的多个版本同时支持gRPC和HTTP允许部署新模型版本,而无需更改任何客户端代码高性能、低消耗,最小化推理时间TF-Serving工作原理代码案例首先需要导入tensorflow-serving需要的第三方库代码案例设置保存模型路径,模型版本代码案例使用tf.saved_model.utils.build_tensor_info,将模型输入,输出转换为server变量形式,并保存代码案例模型保存成功后,我们便可以启动客户端,通过grpc形式发送请求访问模型,并使用模型进行预测,首先声明连接信息。代码案例获取tensorflow-serving服务上的模型,准备使用模型对图像进行预测。代码案例通过stub.Predict.future接受请求中的图像信息,并对图像进行预测。代码案例最后通过opencv提供的图像标注技术,将图像识别的结果标注在图像上。总结本节主要介绍使用tensorflow-serving的方式对模型进行部署、保存以及调用。不过后续开发主要还是以加载h5模型进行预测为主。总结项目四:模型调用服务端开发模型调用方式二项目四:模型调用服务端开发识别结果数据返回本节目标视图函数编写原则Django响应类型Django模板引擎总结(1)掌握将客户端发送的数据进行处理的流程;(2)掌握响应对象的组成;(3)掌握利用render函数最终将结果响应回前端的流程。本节目标视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能视图函数可以返回Web文本、页面、重定向、错误、图片等任何内容视图函数通过HttpResponse、JsonResponse等类表达并返回响应按约定,视图函数放在对应app中的views.py文件中视图函数编写原则响应通过response声明,响应本质上就是服务端发送给客户端的数据结果,在用户将本地图片上传至服务端后,我们需要将识别的数据结果,通过响应的形式发送回客户端,让客户端可以查看到识别结果。其中响应类型如下所示。Django响应类型类型说明HttpResponse主要反馈类型,父类,HTTP状态码默认为200HttpResponseRedirect重定向,HTTP状态码为302HttpResponsePermanentRedirect永久重定向,HTTP状态码为301HttpResponseNotModified网页无改动,该类型无任何参数,HTTP状态码为304HttpResponseBadRequest不良响应,HTTP状态码为400Django响应类型HttpResponse响应类型如下所示类型说明HttpResponseForbidden禁止访问,HTTP状态码为403HttpResponseNotAllowed不被允许,HTTP状态码为405HttpResponseGoneHTTP状态码为410HttpResponseServerError服务器错误,HTTP状态码为500HttpResponseNotFound404错误,HTTP状态码为404Django响应类型Django响应类型接下来通过代码演示HttpResponse响应的具体方式,我们可以直接将需要展示给用户的数据响应回去,然后在urls.py中设置路由即可。通过HttpResponse的方式我们只能向用户响应单一的文本数据,所以我们需要一种更高级的方式显示数据,那就是模板引擎。通过模板引擎我们可以在后端通过render函数直接将一个设定好的HTML网页直接响应给客户,这样可以通过多种形式将数据展示给用户。Django模板引擎Django模板引擎Template.render(request,url,context)是模板对象提供的用于将模板结合内容渲染成HTML的方法context:字典类型,用于声明加载到模板中的内容request:HTTP请求url:HTML网页路径接下来我们演示如何通过render()函数将设计好的html网页响应给客户端。首先在templates目录下新建demo.html页面,网页中声明代码如图所示。Django模板引擎views.py声明函数用于通过render()函数将demo.html页面响应会客户端,同时在urls.py声明路由,然后启动项

温馨提示

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

最新文档

评论

0/150

提交评论