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

Byo*_*Lee 30 c++ python tensorflow

来自SavedModel文档,

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

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

根据我的理解,SavedModel如果有人想要使用TensorFlow服务,那是必须的.不过,我可以部署Tensorflow模型服务,而无需服务器SavedModel:冻结图并将其导出为GraphDef,利用负载曲线进入会议ReadBinaryProto创建 C++或导入围棋.

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

wic*_*cke 44

检查点包含TensorFlow模型中(某些)变量的值.它由a创建Saver,或者给定特定的Variables来保存,或者默认保存所有(非本地)变量.

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

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

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

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

  • 我们通常定期编写检查点,然后将其中一个(通常是最好的一个)包装到SavedModel中.你可以同样简单地将每个检查点变成SavedModel,没有理由只做一个. (3认同)
  • 我可以在这里挂钩并请你用一些关于使用"SavedModel"进行培训的信息来更新你的答案吗?检查点很棒,因为它们允许您保留多个模型版本.因为他们允许训练中止.`SavedModel`似乎只保存一个检查点一次(当调用`add_meta_graph_and_variables`时)并且再也不会.有没有办法定期写检查站? (2认同)