- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有几个关于 SavedModel
的问题API,其documentation我发现很多细节无法解释。
前三个问题是关于传递给 add_meta_graph_and_variables()
的参数的内容。 tf.saved_model.builder.SavedModelBuilder
的方法,而第四个问题是关于为什么要使用 SavedModel
API 结束 tf.train.Saver
.
signature_def_map
的格式是什么争论?保存模型时我通常需要设置这个参数吗? assets_collection
的格式是什么?争论? pb
加载元数据会怎样?由某个标签,但其中有多个元图 pb
匹配那个标签? SavedModel
将整个模型(而不是仅变量)保存在自包含文件中。但是tf.train.Saver
除了 .meta
中的变量外,还保存图形文件。那么使用SavedModel
有什么好处呢? ?文档说 When you want to save and load variables, the graph, and the graph's metadata--basically, when you want to save or restore your model--we recommend using SavedModel. SavedModel is a language-neutral, recoverable, hermetic serialization format. SavedModel enables higher-level systems and tools to produce, consume, and transform TensorFlow models.
SavedModel
的优点是什么是。
SavedModel
的具体例子是什么? (相对于
tf.train.Saver
)会更好用吗?
SavedModel
属性的非常具体的问题,这只是 TensorFlow 提供的用于保存和加载模型的多种机制之一。链接问题中的所有答案均未涉及
SavedModel
API(再次与
tf.train.Saver
不同)。
最佳答案
编辑 :我在 TensorFlow 1.4 回写了这个。截至今天(TensorFlow 1.12 稳定,1.13rc 和 2.0 即将推出)问题中链接的文档已大大改进。
我正在尝试使用 tf.saved_model
并且还发现文档非常(太)抽象。这是我对您问题的完整回答:
1. signature_def_map
:
一种。格式 参见汤姆对 Tensorflow: how to save/restore a model 的回答. ( Ctrl-F
对于“tf.saved_model” - 目前,该问题的短语的唯一用法是在他的回答中)。
湾需要我的理解是你通常需要它。如果您打算使用该模型,您需要知道图形的输入和输出。我认为它类似于 C++ 函数签名:如果您打算在调用后或在另一个 C++ 文件中定义一个函数,则需要在主文件中(即原型(prototype)或头文件)中的签名。
2. assets_collection
:
格式:找不到明确的文档,所以我去了 build 者 source code .该参数似乎是 dtype=tf.string
的张量的可迭代对象。 ,其中每个张量是 Assets 目录的路径。所以,一个 TensorFlow Graph collection应该管用。我想这是参数的同名,但从源代码我希望 Python list
也去工作。
(你没有问你 是否需要 来设置它,但是从 Zoe 对 What are assets in tensorflow? 的回答和 iga 对切线相关 Tensorflow serving: “No assets to save/writes” when exporting models 的回答来看,它通常不需要设置。)
3. 标签:
一种。为什么要上榜 我不知道为什么你必须传递一个列表,但你可以传递一个包含一个元素的列表。例如,在我当前的项目中,我只使用 [tf...tag_constants.SERVING]
标签。
湾何时使用多个 假设您使用显式设备放置进行操作。也许您想保存图形的 CPU 版本和 GPU 版本。显然你想保存每个的服务版本,并说你想保存训练检查点。您可以使用 CPU/GPU 标签和训练/服务标签来管理所有案例。 docs提示一下:
Each MetaGraphDef added to the SavedModel must be annotated with user-specified tags. The tags provide a means to identify the specific MetaGraphDef to load and restore, along with the shared set of variables and assets. These tags typically annotate a MetaGraphDef with its functionality (for example, serving or training), and optionally with hardware-specific aspects (for example, GPU).
def load
, 你会看到的:
saved_model = _parse_saved_model(export_dir)
found_match = False
for meta_graph_def in saved_model.meta_graphs:
if set(meta_graph_def.meta_info_def.tags) == set(tags):
meta_graph_def_to_load = meta_graph_def
found_match = True
break
if not found_match:
raise RuntimeError(
"MetaGraphDef associated with tags " + str(tags).strip("[]") +
" could not be found in SavedModel. To inspect available tag-sets in"
" the SavedModel, please use the SavedModel CLI: `saved_model_cli`"
)
SavedModel
或
tf.train.Saver
:
tf.train.Saver
做任何事。但是,这会让你付出代价。让我概述保存训练模型和部署用例。您将需要您的保护程序对象。将其设置为保存完整图形(每个变量)是最简单的。您可能不想保存
.meta
自从您使用静态图以来,一直都是如此。你需要在你的训练 Hook 中指定它。您可以阅读有关此内容的信息
on cv-tricks .训练完成后,您需要将检查点文件转换为
pb
文件。这通常意味着清除当前图形、恢复检查点、使用
tf.python.framework.graph_util
将变量卡住为常量。 , 并用
tf.gfile.GFile
书写.您可以阅读有关此内容的信息
on medium .之后,您想在 Python 中部署它。您将需要输入和输出张量名称 - 图 def 中的字符串名称。您可以阅读有关此内容的信息
on metaflow
(实际上是关于 tf.train.Saver
方法的非常好的博文) .一些 op 节点可以让您轻松地向其中输入数据。有些没有那么多。我通常放弃寻找合适的节点并添加一个
tf.reshape
这实际上并没有对图形定义进行任何重塑。那是我的临时输入节点。输出也一样。最后,您可以部署您的模型,至少可以在 Python 本地部署。
SavedModel
完成所有这些操作。应用程序接口(interface)。多亏了汤姆的回答,头痛减少了。如果得到适当的记录,您将来将获得更多支持和功能。看起来使用命令行服务更容易(中等链接涵盖了使用
Saver
执行此操作 - 看起来很难,祝你好运!)。它实际上已经融入了新的 Estimator。根据文档,
SavedModel is a language-neutral, recoverable, hermetic serialization format.
SavedModel
的具体例子的
tf.train.Saver
:如果“基本上,什么时候要保存或恢复模型”对您来说还不够清楚:使用它的正确时间是任何时候都可以让您的生活更轻松。对我来说,这看起来像往常一样。特别是如果您使用 Estimators、在 C++ 中部署或使用命令行服务。
关于python - TensorFlow:如何以及为何使用 SavedModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513923/
我正在阅读 documentation和 TensorflowJS 转换器的源代码,它明确区分了 Keras SavedModel 和 Tensorflow SavedModel。 格式之间有什么区别
我有一个 Tensorflow R1.13 训练代码,它在长时间的训练运行期间定期保存一个 SavedModel(我正在关注关于该主题的优秀 article)。我注意到每次保存模型时,尺寸都会增加。事
我在Docker上运行了Tensorflow SavedModel。我在Docker Quickstart Terminal中使用了以下命令,它可以正常工作,为我提供了预测和概率。 curl -d'{
我写了下面的代码,它假设加载一个模型,然后对来自 MNIST 数据集的元素进行预测运行。在执行开始时,代码工作正常,我得到了我想要的预测,但突然间我确实收到了以下错误,我不确定这是否与 .predic
我刚刚完成模型的训练,却发现我导出的服务模型存在签名问题。我如何更新它们? (一个常见问题是为 CloudML Engine 设置错误的形状)。 最佳答案 别担心——您不需要重新训练您的模型。也就是说
我刚刚完成模型的训练,却发现我导出的服务模型存在签名问题。我如何更新它们? (一个常见问题是为 CloudML Engine 设置错误的形状)。 最佳答案 别担心——您不需要重新训练您的模型。也就是说
我有几个关于 SavedModel 的问题API,其documentation我发现很多细节无法解释。 前三个问题是关于传递给 add_meta_graph_and_variables() 的参数的内
我微调了来自 Tensorflow hub 的 BERT 模型,以构建一个简单的情绪分析器。该模型训练并运行良好。在导出时,我简单地使用了: tf.saved_model.save(模型, expor
如果我使用 tensorflow.saved_model.save 保存我的模型SavedModel 格式的函数,之后如何检索此模型中使用了哪些 Tensorflow Ops。由于模型可以恢复,所以这
更新:请参阅我自己对这个问题的回答。这是tensorflow Efficientnet的一个bug 我想做什么 我想微调高效网络。首先,我成功完成了训练并保存了一个模型。它由一个卡住的高效网络和全连接
我们训练了模型的许多变体,这些变体具有不同的配置,并且需要不同的输入预处理(其中预处理是在 TensorFlow 之外完成的)。我想将我们的模型导出为 SavedModels,并且我认为我们将拥有一个
我已经导出了一个 SavedModel,现在我可以将其重新加载并进行预测。它使用以下特征和标签进行训练: F1 : FLOAT32 F2 : FLOAT32 F3 : FLOAT32 L1 : FLO
我正在尝试对使用 SavedModel 加载的模型进行对抗性攻击API。我想针对给定目标的模型损失对输入进行梯度下降。代码有点长,但它是说明问题的最低限度。 from __future__ impor
我已经构建了一个系统,该系统利用 Google ML Engine 使用简单的平面 CNN 架构(从优秀的 WildML post 借用)来训练各种文本分类器。我还大量利用了现有的 ML Engine
我训练了一个用于图像分类的经典 CNN(预训练移动网络)。我现在想在 C++ 中使用这个模型。根据我的理解,我需要创建一个模型库,它可以接受输入并返回其输出。我将模型保存为 .pb (SavedMod
我在将 Keras 生成的顺序模型保存为 SavedModel 格式时遇到问题。 正如 https://www.tensorflow.org/guide/keras/save_and_serializ
我正在尝试优化用于推理的已保存图表,以便我可以在 Android 中使用它。 我第一次尝试使用 optimize_for_inference 脚本失败了 google.protobuf.message
我成功训练了 TensowFlow 增强树估计器。现在我想将其保存为 SavedModel。问题是我收到以下错误。 ValueError: All feature_columns must be _F
我正在尝试在 TensorFlow 2 中运行我以 SavedModel 格式准备的对象检测模型。 该模型采用字节编码 JPEG、PNG 或 GIF 格式作为 encoded_image_string
我想使用 MMdnn将 tensorflow ResNet 模型转换为其他框架。看来我只能使用 mmconvert 从 .pb 卡住图形文件中读取。 但是,当使用 tf.estimator.Estim
我是一名优秀的程序员,十分优秀!