aka*_*aka 15 python tensorflow tensorflow-serving
我tf.contrib.lookup使用训练数据(作为输入)创建一个查找表.然后,我通过该查找表传递每个输入,然后通过我的模型.
这适用于训练,但是当涉及到来自同一模型的在线预测时,它会引发错误:
表未初始化
我正在使用SavedModel保存模型.我从这个保存的模型中运行预测.
如何初始化此表以使其保持初始化状态?或者有更好的方法来保存模型,以便始终初始化表格?
小智 11
我认为你会使用会更好tf.tables_initializer()的legacy_init_op.
tf.saved_model.main_op.main_op()除了表初始化之外,还添加了本地和全局初始化操作.当你加载保存的模型并运行它时legacy_init_op,它会重置你的变量,这不是你想要的.
tf.saved_model.builder.SavedModelBuilder.add_meta_graph使用main_opor legacy_init_opkwarg 将元图形添加到SavedModel包时,可以指定"初始化"操作.tf.group如果需要多个操作,您可以使用单个操作,也可以将多个操作组合在一起.
请注意,在Cloud ML Engine中,您必须使用legacy_init_op.但是在未来的runtime_versions中你将能够使用main_op
(IIRC,从开始runtime_version == 1.2)
saved_model模块提供了一个内置tf.saved_model.main_op.main_op 函数,用于在单个op中包含常见的初始化操作(局部变量初始化和表初始化).
总而言之,代码应如下所示(从此示例改编):
exporter = tf.saved_model.builder.SavedModelBuilder(
os.path.join(job_dir, 'export', name))
# signature_def gets constructed here
with tf.Session(graph=prediction_graph) as session:
# Need to be initialized before saved variables are restored
session.run([tf.local_variables_initializer(), tf.tables_initializer()])
# Restore the value of the saved variables
saver.restore(session, latest)
exporter.add_meta_graph_and_variables(
session,
tags=[tf.saved_model.tag_constants.SERVING],
signature_def_map={
tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature_def
},
# Relevant change to the linked example is here!
legacy_init_op=tf.saved_model.main_op.main_op()
)
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用的是高级库(例如tf.estimator),那么这应该是默认值,如果您需要指定其他初始化操作,则可以将它们指定为tf.train.Scaffold传递给tf.estimator.EstimatorSpecmodel_fn 中的对象的一部分.
| 归档时间: |
|
| 查看次数: |
5578 次 |
| 最近记录: |