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

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

a6353bdf4c03fe396293f3dcc1079021.png

具体而言,我们将了解:

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

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

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

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

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

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

4a76533a045cf065ec4cf619c5207f4f.png

配置开发环境

假设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

4a76533a045cf065ec4cf619c5207f4f.png

构建你的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移植memtester到android平台

硬件搭建起来能进入系统,首要就是测试内存的稳定性,需要一款内存测试工具。 一般都是选择memtester这款linux软件,下载地址如下:http://pyropus.ca/software/memtester/ 把memtester解压到android/external/下(此文默认…

马云对话马斯克(全文):要警惕AI?该移民火星?如何更长寿?马化腾反对产业割裂和技术脱钩...

来源:未来论坛今天(8月29日),2019年世界人工智能大会在上海召开,500余位国内外顶尖高校、行业领军企业、国际组织的重要嘉宾,全球AI知名企业领袖齐聚于此。本次大会以“智联世界,无限可能”为主…

给plt.axvline设置图例(label)

plt.axvline的其中一个参数是label,用于给这条垂直线设置标签。但加上后就是不显示这个这个图例,代码如下: sns.kdeplot(data) plt.axvline(-2, colorr, linestyle--, label0.9) plt.show() 原因会因为没有加这一句: plt.legend…

C#中break,continue,return,,goto,throw的区别(转)

break 语句用于终止最近的封闭循环或它所在的switch 语句。 控制传递给终止语句后面的语句&#xff08;如果有的话&#xff09;。 /// <summary>/// break 示例/// 在此例中&#xff0c;条件语句包含一个应该从 1 计数到 100 的计数器/// 但 break 语句在计数达到 4…

python excel 转json_Python办公自动化| word 表格转excel

之前写过一篇 Python办公自动化 | 批量word报告生成工具 &#xff0c;有小伙伴提出了逆向需求&#xff0c;即&#xff1a;从批量word中获取内容并写入excel&#xff0c;需求背景是汇总一些材料&#xff0c;举例&#xff1a;实习鉴定表、个人简历、档案等。实际需求是这样的&…

python在图中画一条垂直线(matplotlib)

matplotlib.pyplot.axvline https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axvline.html?highlightaxvline#matplotlib.pyplot.axvline 用法&#xff1a; plt.axvline(x, colorr, linestyle--, labelxxx) plt.legend()

坦途与波折:我们需要什么样的人工智能?

来源&#xff1a;资本实验室历史车轮滚滚向前&#xff0c;如今我们正在进入人工智能时代。其中的坦途足以让我们乐观和振奋&#xff0c;其中的波折也可能会让我们不安或担忧。面对未来&#xff0c;我们需要坚持三个基本要点&#xff1a;效率、环保与福祉。1.人工智能与传统产业…

python画一条水平直线(matplotlib)

matplotlib.pyplot.axhline https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axhline.html 用法&#xff1a; plt.axhline(0.06, colorr, linestyle--, labelxxx) plt.legend(locupper left)

我该如何维护一个烂项目?

最近接手了一个很烂的项目&#xff0c;前后3批人开发。A开发一段时间&#xff0c;不知什么原因离职了&#xff0c;交接给了B&#xff1b;B也是开发一段时间&#xff0c;又是未知原因离职了&#xff0c;交接给C&#xff1b;C也是同样的手法交给了我。我一接手&#xff0c;发现了…

sql数字转换为字符_Python|图片转换为字符画^_^

我们很清楚什么是图片&#xff0c;无外乎png、jpg等格式的文件&#xff0c;例如这个?但什么是字符画呢&#xff1f;先看一下官方介绍&#xff1a;字符画&#xff0c;一种由字母、标点、汉字或其他字符组成的图画。简单的字符画是利用字符的形状代替图画的线条来构成简单的人物…

全球机器人产业趋势及特征

来源&#xff1a;创新研究当前&#xff0c;全球机器人市场规模持续扩大&#xff0c;工业机器人市场增速回落&#xff0c;服务、特种机器人增速稳定。技术创新围绕仿生结构、人工智能和人机协作不断深入&#xff0c;产品在教育陪护、医疗康复、危险环境等领域的应用持续拓展&…

matplotlib调整图例的位置

plt.legend(locxx) 其中loc的可选项有以下几种 upper right upper left lower left lower right right center left center right lower center upper center

使用spring-data-mongodb操作mongodb

mongodb.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:mongo"http://www.springframework.org…

python支持向量机_支持向量机(SVM)Python实现

什么是支持向量机? “支持向量机”(SVM)是一种监督机器学习算法&#xff0c;可用于分类或回归挑战。然而&#xff0c;它主要用于分类问题。在这个算法中&#xff0c;我们将每一个数据项作为一个点在n维空间中(其中n是你拥有的特征数)作为一个点&#xff0c;每一个特征值都是一…

AR智能提升工业效率的4大场景与应用实践!

来源&#xff1a;北京物联网智能技术应用协会导 读 ( 文/ e-works整理 )德国学者提出“工业4.0”的概念&#xff0c;即以智能制造为主导的第四次工业革命&#xff0c;或革命性的生产方法。主要围绕两大主题&#xff0c;一是“智能工厂”&#xff0c;二是“智能生产”&#xff0…

matplotlib画图设置线条透明度

plt.plot(x, y, alpha0.5) alpha这个参数用于设置透明度&#xff0c;0~1之间 alpha越小&#xff0c;线条越透明

手机进销存系统/供应链管理系统

花了将近两个月的时间学习了一个企业级进销存项目&#xff0c;已经结束了两周多&#xff0c;现在终于有时间来对这个项目的学习做个总结了&#xff01; 一、首先介绍下这个项目 (注&#xff1a;本人目前大三&#xff0c;专业为信息管理&#xff0c;与编程沾边不多。而我对编程很…

如何评价马云和马斯克在世界人工智能大会的对话?

来源&#xff1a;刘锋的未来课堂马云和马斯克在世界人工智能大会的对话&#xff0c;虽然风轻云淡&#xff0c;天马行空&#xff0c;但两个人其实是针锋相对的&#xff0c;马云的观点是认为人工智能还是人类的工具&#xff0c;为人类的未来提供服务&#xff0c;马斯克继续保持他…

linux 检测mysql链接_MySQL笔记

#忘记原始密码1、修改 /etc/my.cnf&#xff0c;在 [mysqld] 小节下添加一行&#xff1a;skip-grant-tables12、重启mysql&#xff1a;service restart stop3、刷新权限&#xff1a;flush privileges;4、修改密码&#xff1a;alter user rootlocalhost identified by Kgj2019;若…

matplotlib设置多个图例横向水平放置

一般多个图例都是竖向放置 如果想要多个图例横向放置&#xff0c;设置plt.legend的ncol参数&#xff0c;ncol参数表示将图例分为多少列&#xff0c;以两个图例横向放置为例&#xff1a; plt.legend(ncol2)