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

时间:2018-08-01 14:49:31

标签: python tensorflow request keras google-cloud-ml

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

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

因此,我正在尝试找出一种方法,将模型部署到云中,并通过来自Web应用程序的请求(带有图像)进行预测,然后接收包含预测张量的响应。我知道gcloud可能具有一些类似的功能或特性,但是我不确定如何入门。

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

2 个答案:

答案 0 :(得分:2)

您可以导出训练有素的Keras模型并与TensorFlow Serving一起使用。 TF Serving允许托管模型并通过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是包含您的请求图像的字典。

答案 1 :(得分:1)

如果您希望使用点击部署解决方案在Google Cloud上提供模型,请考虑使用Cloud ML Engine's Online Prediction service。首先,按照@sdcbr响应中的说明导出SavedModel。将模型复制到GCS,然后您只需创建一个模型和一个版本:

gcloud ml-engine models create "my_image_model"
gcloud ml-engine versions create "v1"\
    --model "my_image_model" --origin $DEPLOYMENT_SOURCE

或者,甚至更容易地,只需单击几下,使用Cloud Console即可完成上述操作!

您将获得一个无服务器的REST端点,该端点包括身份验证和授权,自动缩放(包括缩放到零)以及记录和监视,而无需编写或维护一行代码。