2017-06-16 172 views
0

问题是关于Tensorflow及其更高的API估算器,以及更一般的关于导出和重复使用模型的问题。Tensorflow导出和复用Python中的Estimator对象

有几种工具可以导出张量流模型:tf.train.Saver,直接用它们的相关权重写入和导入图。

我的兴趣在于tf.estimator.Estimator对象以及我们如何重用它们。我的用例非常简单:我在张量流中使用了一个简单的模型,并且希望在更多参与者中使用它的预测。

存在export_savemodel服务模型的方法,但是我需要通过端口在我的模型中进行通信,我不确定这是否适合于训练。

我的问题有以下几点:

  1. 是否有一个(简单)的方式来使用和进口的export_savemodel输出的蟒蛇?我猜你可以在技术上使用C++代码并在它们周围创建包装?

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

  3. 一般来说,如何在Tensorflow中重用先前训练过的模型的最佳做法是什么?

非常感谢您的阅读!

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

  1. 用重新定义的输入操作重建图形;
  2. 冻结此版本;
  3. 在调用tf.import_graph_def重新加载模型时提供了input_map参数的新输入。

回答

0
  1. 是的,看到这个文档https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md。特别是APIs.Loader.Python部分。
  2. “编译估算器”是什么意思?估算器使用的所有数据都保存到SavedModel中。重置只是高级编排逻辑。矩阵乘法等实际操作由C++库提供,并可在任何硬件上运行 - CPU,GPU或TPU。 XLA是一款非常低级的编译器,远离Estimator API。有关它的更多信息搜索“XLA:TensorFlow,Compiled!(TensorFlow Dev Summit 2017)”
  3. 上面的链接提供了一个非常高级的API。对于较低层,请参阅https://www.tensorflow.org/programmers_guide/meta_graph。在更低层,有GraphDef(请参阅meta_graph页面中的链接)
+0

非常感谢您的回答。你认为你有关于如何使用saved_model对象的链接?我有些努力去理解'input_signatures'和'output_signatures'。与此同时,我发现元图解是一个很好的解决方案,因为您可以重新定义输入参数(因为您通常使用队列进行训练并使用变量/张量进行推断),冻结图并保存图。我尝试了XLA的可能性,但是我的构建失败,不幸运行启动任何会话对象。 – Neo2551

+0

@ Neo2551我不确定'input_signatures'和'output_signatures'是什么意思。如果你的意思是存储在SavedModel中的SIgnatureDefs,你可以看到这个文档https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/signature_defs.md – iga

+0

非常感谢你的回答!这个文档真的很有用!我仍然在努力完全理解整个概念,但是这绝对支持我! – Neo2551