SavedModel,TensorFlow模型的通用序列化格式。
和
SavedModel包装TensorFlow Saver。 Saver主要用于生成变量检查点。
根据我的理解,如果有人想要使用TensorFlow服务,SavedModel
是必须的。但是,我可以将Tensorflow模型部署到没有SavedModel
的服务服务器:冻结图并将其导出为GraphDef
,并使用C ++中的ReadBinaryProto
和Create将图表加载到会话中,或{ Go中的{3}}
SavedModel的目的是什么?用户是否更喜欢SavedModel而不是Checkpoint或GraphDef来聚合更多与模型相关的数据?
答案 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(以及其他数量增长的整洁实用程序),它还可以确保您拥有运行模型所需的所有信息。没有什么比你不能再使用的检查点更令人沮丧的了,因为你修改了你的模型,现在它与检查点文件不兼容,而你想要做的就是通过它进行一些预测以进行比较。