肝货,生产环境中使用Keras、Redis、Flask 和 Apache 进行深度学习

今天我们演示如何在生产环境中使用Keras、Redis、Flask 和 Apache 进行深度学习迪迦自己这么多年也整理了不少关于人工智能的学习资料(内含学习路线图、两大深度学习框架视频、图像识别、OpenCV、计算机视觉、深度学习与神经网络等等等等视频、代码、书籍PPT),如果大家需要也是可以免费分享给你们的,添加助理威信即可免费获取!项目结构keras-complete-rest-api├── helpers.py├── jemma.png├── k...
摘要由CSDN通过智能技术生成

今天我们演示如何在生产环境中使用Keras、Redis、Flask 和 Apache 进行深度学习

迪迦自己这么多年也整理了不少关于人工智能的学习资料(内含学习路线图、两大深度学习框架视频、图像识别、OpenCV、计算机视觉、深度学习与神经网络等等等等视频、代码、书籍PPT),如果大家需要也是可以免费分享给你们的,添加助理威信即可免费获取!

 扫码即可免费领取

「爆肝7天7夜」入门AI人工智能学习路线一条龙!真的不能再透彻了

「爆肝7天7夜」入门AI人工智能学习路线一条龙!真的不能再透彻了

「爆肝7天7夜」入门AI人工智能学习路线一条龙!真的不能再透彻了

项目结构

keras-complete-rest-api
├── helpers.py
├── jemma.png
├── keras_rest_api_app.wsgi
├── run_model_server.py
├── run_web_server.py
├── settings.py
├── simple_request.py
└── stress_test.py

文件解释:

  • run_web_server.py 包含我们所有的 Flask Web 服务器代码——Apache 将在启动我们的深度学习 Web 应用程序时加载它。
  • run_model_server.py 将:
    • 从磁盘加载我们的 Keras 模型
    • 不断轮询Redis寻找新图像进行分类
    • 对图像进行分类(批量处理以提高效率)
    • 将推理结果写回 Redis,以便它们可以通过 Flask 返回给客户端。
  • settings.py 包含我们深度学习生产服务的所有基于 Python 的设置,例如 Redis 主机/端口信息、图像分类设置、图像队列名称等。
  • helpers.py 包含 run_web_server.py 和 run_model_server.py 都将使用的实用函数(即 base64 编码)。
  • keras_rest_api_app.wsgi 包含我们的 WSGI 设置,因此我们可以从我们的 Apache 服务器为 Flask 应用程序提供服务。
  • simple_request.py 可用于以编程方式使用我们的深度学习 API 服务的结果。
  • jemma.png 是我家小猎犬的照片。在调用 REST API 以验证它确实有效时,我们将使用她作为示例图像。
  • 最后,我们将使用 stress_test.py 来给我们的服务器施加压力并在整个过程中测量图像分类。

我们在 Flask 服务器上有一个端点 /predict 。此方法位于 run_web_server.py 中,将根据需要计算输入图像的分类。图像预处理也在 run_web_server.py 中处理。

为了使我们的服务器做好生产准备,我从上周的单个脚本中取出了分类过程函数并将其放置在 run_model_server.py 中。这个脚本非常重要,因为它将加载我们的 Keras 模型并从 Redis 中的图像队列中抓取图像进行分类。结果被写回 Redis(/predict 端点和 run_web_server.py 中的相应函数监视 Redis 以将结果发送回客户端)。

但是除非我们知道深度学习 REST API 服务器的功能和局限性,否则它有什么好处呢?

在 stress_test.py 中,我们测试我们的服务器。我们将通过启动 500 个并发线程来实现这一点,这些线程将我们的图像发送到服务器进行并行分类。我建议在服务器 localhost 上运行它以启动,然后从异地客户端运行它。

构建我们的深度学习网络应用

干货!生产环境中使用Keras、Redis、Flask 和 Apache 进行深度学习

图 1:使用 Python、Keras、Redis 和 Flask 构建的深度学习 REST API 服务器的数据流图。

这个项目中使用的几乎每一行代码都来自我们之前关于构建可扩展深度学习 REST API 的文章——唯一的变化是我们将一些代码移动到单独的文件中,以促进生产环境中的可扩展性。

设置和配置

# initialize Redis connection settings
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = 0
# initialize constants used to control image spatial dimensions and
# data type
IMAGE_WIDTH = 224
IMAGE_HEIGHT = 224
IMAGE_CHANS = 3
IMAGE_DTYPE = "float32"
# initialize constants used for server queuing
IMAGE_QUEUE = "image_queue"
BATCH_SIZE = 32
SERVER_SLEEP = 0.25
CLIENT_SLEEP = 0.25

在 settings.py 中,您将能够更改服务器连接、图像尺寸 + 数据类型和服务器队列的参数。

# import the necessary packages
import numpy as np
import base64
import sys
def base64_encode_image(a):
	# base64 encode the input NumPy array
	return base64.b64encode(a).decode("utf-8")
def base64_decode_image(a, dtype, shape):
	# if this is Python 3, we need the extra step of en
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值