当前位置: 首页 > 面试题库 >

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

鲜于光赫
2023-03-14
问题内容

从SavedModel
Docs中

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

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

据我了解,SavedModel如果有人想使用TensorFlow Serving
,那是必须的。不过,我可以部署Tensorflow模型没有服务服务器SavedModel:冻结图并将其导出为GraphDef,和负载图形到会话中使用ReadBinaryProto和创建C
++或导入围棋。

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


问题答案:

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

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

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

这意味着仅给定一个SavedModel,您就可以编写用于解释或执行其中图形的工具(例如tensorflow/servingsaved_model即将出现的新命令行实用程序tools/)。您只需要提供数据即可。

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



 类似资料:
  • 问题内容: 流式XML解析器(例如SAX和StAX)比构建像DOM解析器之类的树结构的解析器更快,内存效率更高。SAX是推送分析器,这意味着它是观察者模式(也称为侦听器模式)的实例。SAX首先出现,然后是StAX- 拉式解析器,这意味着它基本上像迭代器一样工作。 您可以找到在任何地方都偏爱StAX而不是SAX的原因,但是通常可以归结为:“更易于使用”。 在JAXP上的Java教程中,StAX被模糊

  • 我是机器学习的初学者,目前正在尝试将VGG网络应用于我的神经网络 这是发生的错误 发现714幅图像,分属10类。发现100个图像,属于 到10个班。------------------------------------------------------------------------------------------------------------------------------

  • 问题内容: 如果某些列返回FALSE,如何显示不同的值, 例如, COLUMN“ BASIC”返回FALSE,但我需要为用户显示YES或NO。情况为FALSE,请返回NO。 问题答案: 如果是varchar或bit,则处理NULL 或者如果只是一点点 编辑:

  • 问题内容: 为什么或者为什么不? 问题答案: 对于性能而言,尤其是在较大范围内进行迭代时,通常会更好。但是,在某些情况下,你可能更喜欢: 在Python 3,range()做什么用做的,不存在。如果要编写可在Python 2和Python 3上运行的代码,则不能使用。 在某些情况下实际上可以更快-例如。如果多次重复相同的序列。 xrange()每次都必须重新构造整数对象,但是range()将拥有真

  • 问题内容: 有没有一种方法可以检查表是否存在 而无需 从表中选择和检查值? 也就是说,我知道我可以检查返回的字段数,但是似乎必须有一种更直接/更优雅的方法。 问题答案: 您无需计数。 如果没有错误,则表存在。 或者,如果您想正确,请使用INFORMATION_SCHEMA。 或者,您可以使用 如果结果集中有一行,则表存在。

  • 问题内容: 在Java <1.5中,常量将像这样实现 并且您可以像这样使用它: 现在,显然在1.5中,您应该使用枚举: 现在您可以像这样使用它: 我觉得有点难看。现在,我可以轻松添加几个静态变量: 现在,我可以再次执行此操作: 具有枚举的所有类型安全性。 这是好风格还是坏风格?您能想到更好的解决方案吗? 更新资料 Vilx-是第一个强调我所缺少的东西的人-枚举应该是一等公民。在Java中,这意味着