Mat*_*son 11 google-cloud-platform keras tensorflow google-cloud-ml
我希望使用Google Cloud ML托管我的Keras模型,以便我可以调用API并进行一些预测.我遇到了Keras方面的一些问题.
到目前为止,我已经能够使用TensorFlow构建模型并将其部署在CloudML上.为了使其工作,我不得不对我的基本TF代码进行一些更改.这些更改记录在此处:https://cloud.google.com/ml/docs/how-tos/preparing-models#code_changes
我也能够使用Keras训练类似的模型.我甚至可以用与TF相同的export和export.meta格式保存模型.
from keras import backend as K
saver = tf.train.Saver()
session = K.get_session()
saver.save(session, 'export')
Run Code Online (Sandbox Code Playgroud)
我缺少的部分是如何将输入和输出的占位符添加到我在Keras上构建的图形中?
Lau*_*ert 14
在Google Cloud ML Engine上训练你的模型后(查看这个很棒的教程 ),我用图表命名了我的图形的输入和输出
signature = predict_signature_def(inputs={'NAME_YOUR_INPUT': new_Model.input},
outputs={'NAME_YOUR_OUTPUT': new_Model.output})
Run Code Online (Sandbox Code Playgroud)
您可以在下面看到已经过训练过的keras模型'model.h5'的完整导出示例.
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()
Run Code Online (Sandbox Code Playgroud)
您还可以看到我的完整实现.
编辑:如果我的答案解决了你的问题,请在这里给我一个提升:)
我对 Keras 不太了解。我咨询了一些专家,以下应该有效:
from keras import backend as k
# Build the model first
model = ...
# Declare the inputs and outputs for CloudML
inputs = dict(zip((layer.name for layer in model.input_layers),
(t.name for t in model.inputs)))
tf.add_to_collection('inputs', json.dumps(inputs))
outputs = dict(zip((layer.name for layer in model.output_layers),
(t.name for t in model.outputs)))
tf.add_to_collection('outputs', json.dumps(outputs))
# Fit/train the model
model.fit(...)
# Export the model
saver = tf.train.Saver()
session = K.get_session()
saver.save(session, 'export')
Run Code Online (Sandbox Code Playgroud)
一些要点:
| 归档时间: |
|
| 查看次数: |
9545 次 |
| 最近记录: |