来自 SavedModel Docs ,
SavedModel, the universal serialization format for TensorFlow models.
和
SavedModel wraps a TensorFlow Saver. The Saver is primarily used to generate the variable checkpoints.
据我了解,如果有人想使用 TensorFlow Serving,SavedModel
是必须的。但是,我可以在没有 SavedModel
的情况下将 Tensorflow 模型部署到服务服务器:卡住图形并将其导出为 GraphDef
,然后使用 ReadBinaryProto
将图形加载到 Session 中Create在 C++ 或 Import 中在围棋中。
SavedModel 的目的是什么?用户应该更喜欢 SavedModel 而不是 Checkpoint 或 GraphDef 来聚合更多与模型相关的数据?
最佳答案
检查点包含 TensorFlow 模型中(某些)变量的值。它由 Saver
创建, 要么指定特定的 Variable
来保存,要么默认保存所有(非本地)变量。
要使用检查点,需要有兼容的TensorFlowGraph
,其Variable
s与Variable
s同名检查点。 (如果您没有兼容的 Graph
,您仍然可以使用 contrib 中的 init_from_checkpoint
实用程序将存储在检查点中的值加载到选定的 Variable
中。)
SavedModel
更全面:它包含一组 Graph
(MetaGraph
s,实际上是保存集合等),以及一个应该与这些 兼容的检查点图表
s,以及运行模型所需的任何 Assets 文件(例如词汇文件)。对于它包含的每个 MetaGraph
,它还存储一组签名。签名定义(命名)输入和输出张量。
这意味着只要给定一个 SavedModel,您就可以编写工具(例如 tensorflow/serving
,或将出现在 中的新
很快)解释或执行里面的图表。您所需要提供的只是数据。 saved_model
命令行实用程序tools/
如果有疑问,我总是会在编写 SavedModel
方面犯错,而不仅仅是检查点。这不仅允许您使用 tensorflow/serving(以及其他数量会增加的简洁实用程序),还可以确保您拥有运行模型所需的所有信息。没有什么比您无法再使用的检查点更令人沮丧的了,因为您修改了模型,现在它与检查点文件不兼容,您要做的就是通过它运行一些预测以进行比较。
关于python - TensorFlow 用户应该更喜欢 SavedModel 而不是 Checkpoint 或 GraphDef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216208/