如何为 'wide and deep' 模型创建一个 tensorflow 服务客户端?
How to create a tensorflow serving client for the 'wide and deep' model?
我已经根据 'wide and deep' 示例 (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/wide_n_deep_tutorial.py) 创建了一个模型。
我导出的模型如下:
m = build_estimator(model_dir)
m.fit(input_fn=lambda: input_fn(df_train, True), steps=FLAGS.train_steps)
results = m.evaluate(input_fn=lambda: input_fn(df_test, True), steps=1)
print('Model statistics:')
for key in sorted(results):
print("%s: %s" % (key, results[key]))
print('Done training!!!')
# Export model
export_path = sys.argv[-1]
print('Exporting trained model to %s' % export_path)
m.export(
export_path,
input_fn=serving_input_fn,
use_deprecated_input_fn=False,
input_feature_key=INPUT_FEATURE_KEY
我的问题是,如何创建一个客户端来根据这个导出的模型进行预测?另外,我是否正确导出了模型?
最终我也需要在 Java 中做到这一点。我怀疑我可以通过使用 gRPC 从原型文件创建 Java 类 来做到这一点。
文档非常粗略,因此我在这里提问。
非常感谢!
刚刚花了整整一周的时间来解决这个问题。首先,m.export
将在几周后弃用,因此请使用:m.export_savedmodel(export_path, input_fn=serving_input_fn)
.
而不是该块
这意味着您必须定义 serving_input_fn()
,这当然应该具有与 wide and deep 教程中定义的 input_fn()
不同的签名。也就是说,向前推进,我想建议 input_fn()
类型的东西应该 return 一个 InputFnOps
对象,定义为 here.
以下是我想出的方法:
from tensorflow.contrib.learn.python.learn.utils import input_fn_utils
from tensorflow.python.ops import array_ops
from tensorflow.python.framework import dtypes
def serving_input_fn():
features, labels = input_fn()
features["examples"] = tf.placeholder(tf.string)
serialized_tf_example = array_ops.placeholder(dtype=dtypes.string,
shape=[None],
name='input_example_tensor')
inputs = {'examples': serialized_tf_example}
labels = None # these are not known in serving!
return input_fn_utils.InputFnOps(features, labels, inputs)
这可能不是 100% 地道,但我很确定它有效。现在。
我写了一个简单的教程Exporting and Serving a TensorFlow Wide & Deep Model。
TL;DR
导出估算器有四个步骤:
将要导出的特征定义为估算器初始化期间使用的所有特征的列表。
使用 create_feature_spec_for_parsing
创建功能配置。
构建一个serving_input_fn
适合使用input_fn_utils.build_parsing_serving_input_fn
的服务。
使用export_savedmodel()
导出模型。
要运行一个正确的客户端脚本,您需要执行以下三个步骤:
创建脚本并将其放置在 /serving/ 文件夹中的某处,例如/serving/tensorflow_serving/example/
通过添加py_binary
.
创建或修改相应的BUILD文件
构建并 运行 模型服务器,例如tensorflow_model_server
.
创建、构建和 运行 一个客户端,该客户端向我们的 tensorflow_model_server
发送 tf.Example 进行推理。
有关详细信息,请查看教程本身。
我已经根据 'wide and deep' 示例 (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/wide_n_deep_tutorial.py) 创建了一个模型。
我导出的模型如下:
m = build_estimator(model_dir)
m.fit(input_fn=lambda: input_fn(df_train, True), steps=FLAGS.train_steps)
results = m.evaluate(input_fn=lambda: input_fn(df_test, True), steps=1)
print('Model statistics:')
for key in sorted(results):
print("%s: %s" % (key, results[key]))
print('Done training!!!')
# Export model
export_path = sys.argv[-1]
print('Exporting trained model to %s' % export_path)
m.export(
export_path,
input_fn=serving_input_fn,
use_deprecated_input_fn=False,
input_feature_key=INPUT_FEATURE_KEY
我的问题是,如何创建一个客户端来根据这个导出的模型进行预测?另外,我是否正确导出了模型?
最终我也需要在 Java 中做到这一点。我怀疑我可以通过使用 gRPC 从原型文件创建 Java 类 来做到这一点。
文档非常粗略,因此我在这里提问。
非常感谢!
刚刚花了整整一周的时间来解决这个问题。首先,m.export
将在几周后弃用,因此请使用:m.export_savedmodel(export_path, input_fn=serving_input_fn)
.
这意味着您必须定义 serving_input_fn()
,这当然应该具有与 wide and deep 教程中定义的 input_fn()
不同的签名。也就是说,向前推进,我想建议 input_fn()
类型的东西应该 return 一个 InputFnOps
对象,定义为 here.
以下是我想出的方法:
from tensorflow.contrib.learn.python.learn.utils import input_fn_utils
from tensorflow.python.ops import array_ops
from tensorflow.python.framework import dtypes
def serving_input_fn():
features, labels = input_fn()
features["examples"] = tf.placeholder(tf.string)
serialized_tf_example = array_ops.placeholder(dtype=dtypes.string,
shape=[None],
name='input_example_tensor')
inputs = {'examples': serialized_tf_example}
labels = None # these are not known in serving!
return input_fn_utils.InputFnOps(features, labels, inputs)
这可能不是 100% 地道,但我很确定它有效。现在。
我写了一个简单的教程Exporting and Serving a TensorFlow Wide & Deep Model。
TL;DR
导出估算器有四个步骤:
将要导出的特征定义为估算器初始化期间使用的所有特征的列表。
使用
create_feature_spec_for_parsing
创建功能配置。构建一个
serving_input_fn
适合使用input_fn_utils.build_parsing_serving_input_fn
的服务。使用
export_savedmodel()
导出模型。
要运行一个正确的客户端脚本,您需要执行以下三个步骤:
创建脚本并将其放置在 /serving/ 文件夹中的某处,例如/serving/tensorflow_serving/example/
通过添加
py_binary
. 创建或修改相应的BUILD文件
构建并 运行 模型服务器,例如
tensorflow_model_server
.创建、构建和 运行 一个客户端,该客户端向我们的
tensorflow_model_server
发送 tf.Example 进行推理。
有关详细信息,请查看教程本身。