2017-06-16 173 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