我注意到在Python中,存在几种保存训练过的模型的方法 但是我看不到它们之间的真正区别。
检查点
saver = tf.train.Saver()
saver.save(session, output_path)
冻结
from tensorflow.python.framework import graph_util
input_graph_def = graph.as_graph_def()
output_graph_def = graph_util.convert_variables_to_constants(
session, input_graph_def, output_nodes_names)
with tf.gfile.GFile(output_graph, "wb") as output_graph_file:
output_graph_file.write(output_graph_def.SerializeToString())
SavedModelBuilder
builder = tf.saved_model.builder.SavedModelBuilder(output_path)
builder.add_meta_graph_and_variables(
session,
[tf.saved_model.tag_constants.SERVING],
clear_devices=True)
builder.save()
让我们考虑不同的场景:评估/推断,微调,服务API,导出到其他框架。 为每种情况保存模型的最佳方法是什么?是否有关于何时使用一种方法的规则?
谢谢
答案 0 :(得分:1)
这不是一个详尽的答案,但是对于现代(2018年中)的TensorFlow,您可能只需要Checkpoints和SavedModels。
如
中所指出https://www.tensorflow.org/get_started/checkpoints
|
“冻结”在很大程度上被折叠并由SavedModel取代。
在您的训练代码中,并且您仍然想保留继续训练/微调的能力时,检查点是必经之路,因为所有相关的代码/状态不仅要训练,而且还要监视是否保持训练在检查点和您的代码之间。
当您移至“服务”端(即消费)时,您将添加使用该模型所需的所有元数据,剔除不需要的训练元素,然后转到SavedModel。
我个人还没有尝试将TensorFlow中的导出到其他框架,只是将其导入其中,所以我无法就哪种情况最合适提出好意见。