检查点包含TensorFlow模型中的(某些)变量的值。它是由Saver
创建的,该Saver
被指定要保存的特定Variable
,或者默认情况下保存所有(非本地)变量。
要使用检查点,你需要有一个兼容TensorFlow Graph
,其Variable
■找同名的Variable
■在检查站。 (如果没有兼容的Graph
,您仍然可以使用contrib中的init_from_checkpoint
实用程序将存储在检查点中的值加载到选定的Variable
中。)
SavedModel
更加全面:它包含一组Graph
( MetaGraph
是MetaGraph
,用于保存集合等),以及一个应该与这些Graph
兼容的检查点,以及需要使用的任何资产文件运行模型(例如词汇表文件)。对于它包含的每个MetaGraph
,它还存储一组签名。签名定义(命名)输入和输出张量。
这意味着仅给定一个SavedModel,您就可以编写解释或执行其中图形的工具(例如tensorflow/serving
或不久后将出现在tools/
的新的saved_model
命令行实用程序)。您只需要提供数据即可。
如有疑问,我总是会在编写SavedModel
,而不仅仅是检查点。这不仅使您可以使用tensorflow / serving(以及其他数量不断增加的简洁实用程序),还可以确保您拥有运行模型所需的所有信息。没有什么比检查点更令人沮丧的了,您不能再使用它了,因为您修改了模型,现在它与检查点文件不兼容,您要做的就是通过它进行一些预测以进行比较。
0
从SavedModel Docs中 ,
和
根据我的理解,如果有人要使用TensorFlow Serving,则必须使用
SavedModel
。但是,我可以在没有SavedModel
情况下将Tensorflow Model部署到服务服务器:冻结图并将其导出为GraphDef
,然后使用ReadBinaryProto
图加载到Session中并在C ++中创建或在Go中导入 。SavedModel的目的是什么?用户是否应该选择SavedModel而不是Checkpoint或GraphDef来聚合更多与模型相关的数据?