通过Google Cloud ML部署Keras模型 [英] Deploying Keras Models via Google Cloud ML

查看:544
本文介绍了通过Google Cloud ML部署Keras模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我期待使用Google Cloud ML托管我的Keras模型,以便我可以调用API并进行一些预测。我遇到了Keras方面的一些问题。

到目前为止,我已经能够使用TensorFlow构建模型并将其部署到CloudML上。为了这个工作,我必须对我的基本TF代码进行一些更改。这些更改记录在此处: https://cloud.google.com / ml / docs / how-tos /准备模型#code_changes



我也可以使用Keras来训练类似的模型。我甚至可以使用与TF相同的export和export.meta格式保存模型。

  from keras import后端作为K 

saver = tf.train.Saver()
session = K.get_session()
saver.save(session,'export')

我缺少的部分是如何将输入和输出的占位符添加到我在Keras上构建的图中?

解决方案

在Google Cloud ML Engine上训练模型后(查看这个令人敬畏的教程),我用

$命名了我的图形的输入和输出b
$ b

  signature = predict_signature_def(inputs = {'NAME_YOUR_INPUT':new_Model.input},
outputs = {'NAME_YOUR_OUTPUT':new_Model.output} )

您可以看到完整的导出示例下面是训练好的keras模型'model.h5'。

  import keras.backend as K 
将tensorflow作为tf
从keras.models导入load_model,Sequential
来自tensorflow.python.saved_model导入构建器作为saved_model_builder
来自tensorflow.python.saved_model导入tag_constants,signature_constants $ b $来自tensorflow.python.saved_model.signature_def_utils_impl导入predict_signature_def

#reset session
.clear_session()
sess = tf.Session()
K.set_session(sess)

#禁用加载学习节点
.set_learning_phase(0)

#加载模型
模型=加载模型('model.h5')
config = model.get_config()
权重=模型.get_weights()
new_Model = Sequential.from_config(config)
new_Model.set_weights(权重)

导出保存的模型
export_path ='YOUR_EXPORT_PATH'+'/ export'
builder = saved_model_builder.SavedModelBuilder(export_path)

signature = predict_signature_def(inputs = {'NAME_Y OUR_INPUT':new_Model.input},
outputs = {'NAME_YOUR_OUTPUT':new_Model.output})

with K.get_session()as sess:
builder.add_meta_graph_and_variables(sess = sess,
tags = [tag_constants.SERVING],
signature_def_map = {
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:signature})
builder.save()

您也可以看到我的完整实施



编辑:如果我的答案解决了您的问题,请让我在这里提升:


I am looking to use Google Cloud ML to host my Keras models so that I can call the API and make some predictions. I am running into some issues from the Keras side of things.

So far I have been able to build a model using TensorFlow and deploy it on CloudML. In order for this to work I had to make some changes to my basic TF code. The changes are documented here: https://cloud.google.com/ml/docs/how-tos/preparing-models#code_changes

I have also been able to train a similar model using Keras. I can even save the model in the same export and export.meta format as I would get with TF.

from keras import backend as K

saver = tf.train.Saver()
session = K.get_session()
saver.save(session, 'export')

The part I am missing is how do I add the placeholders for input and output into the graph I build on Keras?

解决方案

After training your model on Google Cloud ML Engine (check out this awesome tutorial ), I named the input and output of my graph with

signature = predict_signature_def(inputs={'NAME_YOUR_INPUT': new_Model.input},
                                  outputs={'NAME_YOUR_OUTPUT': new_Model.output})

You can see the full exporting example for an already trained keras model 'model.h5' below.

import keras.backend as K
import tensorflow as tf
from keras.models import load_model, Sequential
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import tag_constants, signature_constants
from tensorflow.python.saved_model.signature_def_utils_impl import predict_signature_def

# reset session
K.clear_session()
sess = tf.Session()
K.set_session(sess)

# disable loading of learning nodes
K.set_learning_phase(0)

# load model
model = load_model('model.h5')
config = model.get_config()
weights = model.get_weights()
new_Model = Sequential.from_config(config)
new_Model.set_weights(weights)

# export saved model
export_path = 'YOUR_EXPORT_PATH' + '/export'
builder = saved_model_builder.SavedModelBuilder(export_path)

signature = predict_signature_def(inputs={'NAME_YOUR_INPUT': new_Model.input},
                                  outputs={'NAME_YOUR_OUTPUT': new_Model.output})

with K.get_session() as sess:
    builder.add_meta_graph_and_variables(sess=sess,
                                         tags=[tag_constants.SERVING],
                                         signature_def_map={
                                             signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature})
    builder.save()

You can also see my full implementation.

edit: And if my answer solved your problem, just leave me an uptick here :)

这篇关于通过Google Cloud ML部署Keras模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆