當您使用main_op
或legacy_init_op
kwarg將元圖添加到您的SavedModel捆綁包tf.saved_model.builder.SavedModelBuilder.add_meta_graph
時,您可以指定「初始化」操作。如果您需要多個操作,您可以使用單個操作,也可以將多個操作與tf.group
組合在一起。
請注意,在Cloud ML Engine中,您必須使用legacy_init_op
。然而,在未來runtime_version
是你將能夠使用main_op
(IIRC,從runtime_version == 1.2
)
的saved_model模塊提供了一個內置的tf.saved_model.main_op.main_op
包裹起來在單運常見的初始化操作(局部變量初始化,並表初始化)。
因此,在總結,代碼應該像這樣(改編自this example):
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.estimator
)這應該是默認的,如果你需要指定額外的初始化操作,您可以將它們指定爲您在model_fn中傳遞給tf.estimator.EstimatorSpec
的tf.train.Scaffold
對象的一部分。