2016-09-16 96 views
3

一般來說,有三種方法,我能想到的在TF閱讀習慣的數據:自定義數據讀取器(LMDB)在Tensorflow

  1. 機實現/自定義數據讀取器 https://www.tensorflow.org/versions/r0.10/how_tos/new_data_formats/index.html
  2. 的Python函數封裝 https://www.tensorflow.org/versions/r0.9/api_docs/python/script_ops.html
  3. 佔位符 我已經小鬼成功地說這一點。但是我想要像(1)或(2)這樣的圖表解決方案。

有人可以詳細討論(1)和(2)之間的區別,主要是從性能/效率角度出發,所以我可以使用隊列跑步者。

我的感覺說(1)應該是最有效和最穩健的方式。但是,除非我共享或公開代碼並且其他用戶將不得不編譯,否則該解決方案將不可移植。鑑於(2)和(3)是便攜式的,對嗎?

我也在GitHub上打開了一個功能請求'LMDB Reading Feature',這個問題被誤解和關閉爲一個問題。

UPDATE

TensorFlow不具有本機讀取器:https://github.com/tensorflow/tensorflow/pull/9950

回答

1

(2)(3)從 Python的GIL兩個遭受;最終你可能會鎖定。因此,這種實現方式也較慢,因爲它不在圖中,並且很難正確並行化。它既快速又簡單,但也不是最理想的。所以,去1親去;

我還發現,(1)有兩種解決方案:

(1A)實施源的自定義運算。

如果您希望您的作業在質量允許的某個時間點在Tensorflow源代碼中結束,則可以這樣做。

(1B)實施獨立定製操作。

這事實證明非常簡單和便攜。您可以編譯自己的.cc代碼,並通過Python進行註冊。無需重建源代碼:https://www.tensorflow.org/extend/adding_an_op