无法在 tensorflow 会话中保存 tf.contrib.learn wide and deep 模型并在 TensorFlow Serving 上提供它
Unable to save the tf.contrib.learn wide and deep model in a tensorflow session and serve it on TensorFlow Serving
我是 运行 TensorFlow serving 中的 tf.contrib.learn wide and deep model 并导出我正在使用的训练模型
with tf.Session() as sess:
init_op = tf.initialize_all_variables()
saver = tf.train.Saver()
m.fit(input_fn=lambda: input_fn(df_train), steps=FLAGS.train_steps)
print('model successfully fit!!')
results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
model_exporter = exporter.Exporter(saver)
model_exporter.init(
sess.graph.as_graph_def(),
init_op=init_op,
named_graph_signatures={
'inputs': exporter.generic_signature({'input':df_train}),
'outputs': exporter.generic_signature({'output':df_train[impressionflag]})})
model_exporter.export(export_path, tf.constant(FLAGS.export_version), sess)
print ('Done exporting!')
但是在使用命令saver = tf.train.Saver()
时出现错误ValueError: No variable to save is displayed
enter image description here
如何保存模型,以便创建在 tensorflow 标准服务器中加载导出模型时需要的可服务对象?感谢任何帮助。
那你的图表有变量吗?如果不是,并且所有操作都使用常量,您可以在 Saver constructor:
中指定一个标志
saver = tf.train.Saver(allow_empty=True)
图表和会话包含在 Estimator 中,不会暴露或泄露。因此,通过使用 Estimator.export() 我们可以导出模型并创建可用于 model_servers 上的 运行 的可服务对象。
Estimator.export()
现已弃用,因此您需要使用 Estimator.export_savedmodel()
.
这里我写了一个简单的教程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 进行推理。
有关详细信息,请查看教程本身。
希望对您有所帮助。
我是 运行 TensorFlow serving 中的 tf.contrib.learn wide and deep model 并导出我正在使用的训练模型
with tf.Session() as sess:
init_op = tf.initialize_all_variables()
saver = tf.train.Saver()
m.fit(input_fn=lambda: input_fn(df_train), steps=FLAGS.train_steps)
print('model successfully fit!!')
results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
model_exporter = exporter.Exporter(saver)
model_exporter.init(
sess.graph.as_graph_def(),
init_op=init_op,
named_graph_signatures={
'inputs': exporter.generic_signature({'input':df_train}),
'outputs': exporter.generic_signature({'output':df_train[impressionflag]})})
model_exporter.export(export_path, tf.constant(FLAGS.export_version), sess)
print ('Done exporting!')
但是在使用命令saver = tf.train.Saver()
时出现错误ValueError: No variable to save is displayed
enter image description here
如何保存模型,以便创建在 tensorflow 标准服务器中加载导出模型时需要的可服务对象?感谢任何帮助。
那你的图表有变量吗?如果不是,并且所有操作都使用常量,您可以在 Saver constructor:
中指定一个标志
saver = tf.train.Saver(allow_empty=True)
图表和会话包含在 Estimator 中,不会暴露或泄露。因此,通过使用 Estimator.export() 我们可以导出模型并创建可用于 model_servers 上的 运行 的可服务对象。
Estimator.export()
现已弃用,因此您需要使用 Estimator.export_savedmodel()
.
这里我写了一个简单的教程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 进行推理。
有关详细信息,请查看教程本身。
希望对您有所帮助。