Skip to main content
 首页 » 编程设计

python之如何将 Keras CNN 模型部署到 Web 服务

2024年08月15日49artech

我目前正在尝试为 Web 服务部署 Keras 卷积神经网络。

我曾尝试将我保存的 keras hdf5 模型转换为 tensorflow.js 模型并进行部署,但由于该模型相对健壮,因此会降低客户端应用程序的速度,因此会占用客户端内存中的大量空间。

因此,我试图找出一种方法来在云中部署模型,并通过网络应用程序对图像的请求进行预测,然后接收包含预测张量的响应。我知道 gcloud 可能有一些类似的能力或特性,但我不确定如何开始。

基本上,我想问的是是否有任何服务可以让我部署一个预训练和保存的卷积神经网络模型,我可以在请求中将图像发送到该模型并使用该模型返回预测的张量?

请您参考如下方法:

您可以导出经过训练的 Keras 模型并使用 TensorFlow Serving 为它提供服务. TF 服务允许托管模型并通过 gRPC 或 REST 请求调用它们。您可以部署一个带有端点的 flask 应用程序,该端点接受图像,将其包装为有效负载并通过 requests 模块调用您的模型。

将模型导出为可服务对象的代码如下所示:

import tensorflow as tf 
 
# The export path contains the name and the version of the model 
model = keras.models.load_model('./mymodel.h5') 
 
# Feth the Keras session and save the model 
with keras.backend.get_session() as sess: 
    tf.saved_model.simple_save( 
        sess, 
        export_dir, 
        inputs={'images': model.input}, 
        outputs={t.name:t for t in model.outputs}) 

这将存储 TF 服务所需的文件。从此目录中,您可以按如下方式托管模型:

tensorflow_model_server --model_base_path=$(pwd) --rest_api_port=9000 --model_name=MyModel 

您的请求将如下所示:

requests.post('http://ip:9000/v1/models/MyModel:predict', json=payload) 

其中 payload 是包含您的请求图像的字典。