我在TensorFlow服务中运行tf.contrib.learn宽和深模型并导出训练模型我正在使用这段代码
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标准服务器中加载导出的模型时创建一个必需的servable?任何帮助表示赞赏。
答案 0 :(得分:1)
图表和会话包含在Estimator中,不会泄露或泄露。因此,通过使用Estimator.export(),我们可以导出模型并创建一个可用于在model_servers上运行的servable。
答案 1 :(得分:1)
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()
导出模型。
要正确运行客户端脚本,您需要执行以下三个步骤:
创建并将脚本放在/ serve /文件夹中的某个位置,例如/服务/ tensorflow_serving /示例/
通过添加py_binary
构建并运行模型服务器,例如tensorflow_model_server
。
创建,构建并运行一个客户端,该客户端将tf.Example发送到我们的tensorflow_model_server
进行推断。
有关详细信息,请查看教程本身。
希望它有所帮助。
答案 2 :(得分:0)
那么你的图表有变量吗?如果不是,并且所有操作都使用常量,则可以在Saver constructor中指定一个标志:
saver = tf.train.Saver(allow_empty=True)