TensorFlow用户是否应该选择SavedModel而不是Checkpoint或GraphDef?

时间:2017-02-14 01:06:28

标签: python c++ tensorflow

来自SavedModel Docs

  

SavedModel,TensorFlow模型的通用序列化格式。

  

SavedModel包装TensorFlow Saver。 Saver主要用于生成变量检查点。

根据我的理解,如果有人想要使用TensorFlow服务,SavedModel是必须的。但是,我可以将Tensorflow模型部署到没有SavedModel的服务服务器:冻结图并将其导出为GraphDef,并使用C ++中的ReadBinaryProtoCreate将图表加载到会话中,或{ Go中的{3}}

SavedModel的目的是什么?用户是否更喜欢SavedModel而不是Checkpoint或GraphDef来聚合更多与模型相关的数据?

1 个答案:

答案 0 :(得分:36)

检查点包含TensorFlow模型中(某些)变量的值。它由Saver创建,要么保存特定Variable,要么默认保存所有(非本地)变量。

要使用检查点,您需要具有兼容的TensorFlow Graph,其Variable与检查点中的Variable具有相同的名称。 (如果您没有兼容的Graph,您仍然可以使用contrib中的init_from_checkpoint实用程序将存储在检查点中的值加载到选定的Variable中。)

SavedModel更加全面:它包含一组Graph s(MetaGraph s,实际上是保存集合等),以及一个应该检查点与这些Graph兼容,以及运行模型所需的任何资产文件(例如词汇表文件)。对于它包含的每个MetaGraph,它还存储一组签名。签名定义(命名)输入和输出张量。

这意味着只给出一个SavedModel,您可以编写解释或执行的工具(例如tensorflow/serving或将出现在saved_model中的新tools/命令行实用程序)里面的图表。您需要提供的只是数据。

如果有疑问,我总是会错误地写SavedModel,而不仅仅是检查点。这不仅允许您使用tensorflow / serve(以及其他数量增长的整洁实用程序),它还可以确保您拥有运行模型所需的所有信息。没有什么比你不能再使用的检查点更令人沮丧的了,因为你修改了你的模型,现在它与检查点文件不兼容,而你想要做的就是通过它进行一些预测以进行比较。