Python 中的 Tensorflow 导出和重用 Estimator 对象

Tensorflow export and reuse Estimator object in Python

问题是关于 Tensorflow 及其更高的 API 估计器,更普遍的是关于导出和重用模型。

存在多种导出张量流模型的工具:tf.train.Saver,直接使用相关权重编写和导入图形。

我的兴趣在于 tf.estimator.Estimator 对象以及我们如何重用它们。我的用例非常简单:我在 tensorflow 中拟合了一个简单的模型,并希望在更复杂的模型中使用它的预测。

有一个 export_savemodel 方法来为模型提供服务,但是我需要通过端口在我的模型中进行通信,我不确定这是否适合训练。

我的问题如下:

  1. 有没有一种(简单的)方法可以在 python 中使用和导入 export_savemodel 的输出?我猜你可以在技术上使用 C++ 代码并围绕它们创建包装器?

  2. 是否有一种有效的方法来编译 tf.estimator.Estimator 并在 Python 中重用它? XLA 编译器似乎很有趣,但我无法确定是否可以在 Python.

  3. 中使用结果
  4. 一般来说,关于如何在 Tensorflow 中重用以前训练的模型的最佳实践是什么?

感谢您的阅读!

EDIT(我自己的回答):接受的答案提供使用 saved_model API。但是,我认为理解图和冻结图的概念是值得的。此 gist link 说明了可能在 saved_model api 中复制的主要步骤。基本上,您必须:

  1. 使用重新定义的输入操作重建图形;
  2. 冻结此版本;
  3. 在调用 tf.import_graph_def 重新加载模型时为 input_map 参数提供新的输入。
  1. 是的,请参阅此文档 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md。特别是 APIs.Loader.Python 部分。
  2. "compile an estimator" 是什么意思? estimator 使用的所有数据都保存到 SavedModel 中。重置只是高级编排逻辑。矩阵乘法等实际操作由 C++ 库和 运行 在您拥有的任何硬件(CPU、GPU 或 TPU)上提供。 XLA 是一个非常低级的编译器,与 Estimator API 相去甚远。有关它的更多信息,请搜索关于它的讨论 "XLA: TensorFlow, Compiled! (TensorFlow Dev Summit 2017)"
  3. 上面的link提供了一个非常高级的API。下层见https://www.tensorflow.org/programmers_guide/meta_graph。在更底层,有 GraphDef(参见 meta_graph 页面中的 links)