在本教程中,我们将介绍一个简单的方法来获取Keras模型并将其部署为REST API。本文所介绍的示例将作为你构建自己的深度学习API的模板/起点——你可以扩展代码,根据API端点的可伸缩性和稳定性对其进行定制。

具体而言,我们将了解:

· 如何(以及如何不)将Keras模型加载到内存中,以便有效地进行推理

· 如何使用Flask web框架为我们的API创建端点

· 如何使用我们的模型进行预测,用JSON-ify转换它们,并将结果反馈到客户端

· 如何使用cURL和Python来调用我们的Keras REST API

在本教程结束时,你将能很好地理解创建Keras REST API所需的组件(以最简单的形式)。

请随意使用本指南中提供的代码作为你自己的深度学习REST API起点。

配置开发环境

假设Keras已经配置并安装在你的机器上。如果没有,请确保使用官方安装说明安装Keras(https://keras.io/#installation)。

然后,需要安装Flask (http://flask.pocoo.org/)(及其相关的依赖项),一个Python web框架,这样就可以构建API端点了。还需要请求(http://docs.python-requests.org/en/master/),这样就可以使用API了。

有关的pip安装命令如下:

$ pip install flask gevent requests pillow

构建你的Keras REST API

Keras REST API独立于一个名为run_keras_server.py的文件中。为了简单起见,我们将安装保存在一个文件中——安装启用也可以很容易地模块化。

在 run_keras_server.py中,你会发现三个函数,即:

· load_model:用于加载训练好的Keras模型,并为推理做准备。

· prepare_image:这个函数在通过我们的网络进行预测之前对输入图像进行预处理。如果你没有使用图像数据,则可能需要考虑将名称更改为更通用的prepare_datapoint,并应用一些可能需要的缩放/标准化。

· predict:API的实际端点可以将请求中的输入数据分类,并将结果反馈给客户端。

# import the necessary packagesfrom keras.applications import ResNet50from keras.preprocessing.image import img_to_arrayfrom keras.applications import imagenet_utilsfrom PIL import Imageimport numpy as npimport flaskimport io

# initialize our Flask application and the Keras modelapp = flask.Flask(__name__)model = None

第一个代码片段处理导入了所需的程序包,并且对Flask应用程序和模型进行了初始化。

在此,我们定义load_model函数:

def load_model():

# load the pre-trained Keras model (here we are using a model

# pre-trained on ImageNet and provided by Keras, but you can

# substitute in your own networks just as easily)

global model

model = ResNet50(weights="imagenet")

顾名思义,这个方法负责将我们的架构实例化,并从磁盘加载权重。

为了简单起见,将使用在ImageNet数据集上预先训练过的ResNet50架构。

如果你正在使用自定义模型,则需要修改此函数以从磁盘加载架构+权重。

在对任何来自客户端的数据进行预测之前,首先需要准备并预处理数据:

def prepare_image(image, target):

# if the image mode is not RGB, convert it

if image.mode != "RGB":

image = image.convert("RGB")

# resize the input image and preprocess it

image = image.resize(target)

image = img_to_array(image)

image = np.expand_dims(image, axis=0)

image = imagenet_utils.preprocess_input(image)

# return the processed image

return image

这个函数:

· 接受输入图像

· 将模式转换为RGB(如果需要)

· 将大小调整为224x224像素(ResNet的输入空间维度)

· 通过平均减法数组和缩放对阵列进行预处理

此外,在通过模型传递输入数据之前,应该根据某一预处理、缩放或标准化来修改这个函数。

现在可以定义predict函数了——该方法会处理对/predict端点的任何请求:

@app.route("/predict

keras安装_代码详解:构建一个简单的Keras+深度学习REST API相关推荐

  1. java五子棋代码详解_代码详解:Java和Valohai的深度学习之旅

    全文共10735字,预计学习时长22分钟或更长 有一款生命周期管理工具(也称云服务)叫做Valohai,它有着友好的用户界面和简洁的布局设计. 许多有关Valohai的案例和文档都是基于Python和 ...

  2. 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记

    生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...

  3. CNN入门详解及TensorFlow源码实现--深度学习笔记

    CNN入门详解及TensorFlow源码实现–深度学习笔记 ##一.卷积神经网络 ###1.简介 卷积神经网络是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出 ...

  4. sift计算描述子代码详解_代码详解——如何计算横向误差?

    在路径跟踪控制的论文中,我们常会看到判断精确性的指标,即横向误差和航向误差,那么横向误差和航向误差如何获得? 在前几期代码详解中,参考路径和实际轨迹均由To Workspace模块导出,如图所示: 那 ...

  5. github密码格式_如何使用GitHub构建一个简单的网页 (不用框架版本)

    1.申请GitHub账号 进入GitHub官网,点击右上角的Sign up进行注册, 注册很简单,只要填写好用户名,邮箱,密码就行(已注册的用户名,邮箱不能再进行注册) 下面有一个你是人类的验证(照着 ...

  6. cnn神经网络可以用于数据拟合吗_代码详解:最全面的卷积神经网络介绍,都在这里了...

    全文共8600字,预计学习时长40分钟或更长 图片来源:pexels.com 神经网络由具有权重和偏差的神经元组成.通过在训练过程中调整这些权重和偏差,以提出良好的学习模型.每个神经元接收一组输入,以 ...

  7. 命令控制qq自动申请远程控制_代码详解

    话说前一篇: http://blog.csdn.net/testingba/article/details/8003679 没有成功解决: 2.      控制好了以后,那个程序会老是去激活Aqq窗体 ...

  8. python twisted安装_图文详解python之twisted模块安装

    Twisted是一个事件驱动的网络框架. 最近开始学习了解Twisted,首先肯定要安装twisted模块. 但是在cmd下执行:pip install twisted 出现了下面的问题:" ...

  9. python解析原理_代码详解:Python虚拟环境的原理及使用

    Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...

最新文章

  1. batchsize设置为2的n次方_试卷中的页码设置
  2. max unity 方向_在2D游戏中实现方向光照
  3. 被单位开除后,以前的工龄还算吗?
  4. SQL Server数据库中的T-SQL如果存在语句概述
  5. C学习笔记-makefile
  6. 精灵说科技 java,Java动画动画(精灵)
  7. java连接查询where_SQL中join连接查询时条件放在on后与where后的区别
  8. 文字处理技术:终于明白了压缩要怎么做
  9. python百度文库免券下载
  10. 什么是Csrss.exe进程?此进程有何作用?
  11. MT7621A路由器芯片参数/处理器资料(原理图/CPB)介绍
  12. 实现图片的裁切缩放添加水印等
  13. ld链接动态库静态库问题
  14. 最好的在线Latex编辑器
  15. 注册FaceBook和购买FaceBook小白号的区别
  16. php判断学生姓名,【PHP】百家姓姓名判断
  17. ISP AWB自动白平衡包含一段简单的色温估计进行白平衡调节的程序
  18. 犀利姐—林家小妹:将犀利进行到底!
  19. 502粘到手上变硬了怎么办_手指被502粘住了?别硬扯,教你2招,胶水自动融化...
  20. excel能和html链接吗,非常棒的 Excel 超链接功能可以跳转到网址和邮箱等

热门文章

  1. Python中如何在一行里获取多个异常
  2. android 视频转字节,如何将视频文件(.mp4)格式转换为android中的二进制格式?...
  3. centos6.5装mysql好难_CentOS6.5 下MySQL傻瓜式安装
  4. 论文小综 | 文档级关系抽取方法(下)
  5. 美团大脑 | 知识图谱的建模方法及其应用
  6. 海马体what where记忆推理模型
  7. 【实体对齐·HGCN】Jointly Learning Entity and Relation Representations for Entity Alignment
  8. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多
  9. 64 求1+2+3+...+n(发散思维能力 )
  10. 你必须搞清楚的String,StringBuilder,StringBuffer