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()
)
我认为最好使用
tf.tables_initializer()
作为legacy_init_op
。除了表初始化之外,
tf.saved_model.main_op.main_op()
还添加本地和全局初始化操作。 当您加载保存的模型并运行legacy_init_op
时,它将重置您的变量,这不是您想要的。使用} 的SavedModel包时,可以指定“初始化”操作。如果需要多个操作,可以使用单个操作,也可以使用
main_op
或legacy_init_op
kwarg将元图添加到具有^{tf.group
将多个操作组合在一起。注意,在Cloud ML引擎中,必须使用
legacy_init_op
。但是在未来的runtime_version
中,您将能够使用main_op
(IIRC,从runtime_version == 1.2
开始)saved_model模块提供了一个内置的^{} ,用于在单个op(本地变量初始化和表初始化)中结束公共初始化操作。
总之,代码应该是这样的(改编自this example):
注意:如果您使用的是高级库(如^{} ),这应该是默认的,如果需要指定其他初始化操作,可以将它们指定为传递给模型中^{} 的^{} 对象的一部分fn。
相关问题 更多 >
编程相关推荐