2017-05-17 60 views
1

我想弄清楚如何使用Android上的訓練the image_ocr example in Keras的張量流模型。我已經按照本教程創建了應用程序要使用的張量流模型(即凍結圖以創建.pb文件)。使用keras的image_ocr tensorflow模型Android上的示例

TFDroid中的例子很不錯,但它們都不適用於我的模型。我現在有幾個問題:

  1. 當您要在Android上使用您自己的模型時,需要考慮什麼?
  2. 培訓張量流模型到在Android上使用它的工作流程是什麼?

回答

1

我正在解決這個更好的文檔,但現在這裏是從我目前的草案摘錄,可以幫助:

在大多數情況下,培養具有TensorFlow模型會給你包含的文件夾GraphDef文件(通常以.pb或.pbtxt擴展名結尾)和一組檢查點文件。移動或嵌入式部署需要的是單個GraphDef文件,它已被「凍結」,或者其變量已轉換爲內聯常量,因此所有內容都位於一個文件中。 要處理轉換,您需要freeze_graph.py腳本,它保存在tensorflow/pythons/tools/freeze_graph.py中。你會像這樣運行它:

bazel build tensorflow/tools:freeze_graph 
bazel-bin/tensorflow/tools/freeze_graph \ 
--input_graph=/tmp/model/my_graph.pb \ --input_checkpoint=/tmp/model/model.ckpt-1000 \ --output_graph=/tmp/frozen_graph.pb \ 
--input_node_names=input_node \ 
--output_node_names=output_node \ 

input_graph參數應指向包含您的模型架構的GraphDef文件。您的GraphDef可能已經以文本格式存儲在磁盤上,在這種情況下,它可能以'.pbtxt'而不是'.pb'結尾,並且您應該爲命令添加一個額外的--input_binary=false標誌。

input_checkpoint應該是最近保存的檢查點。正如檢查點部分所述,您需要在此處爲​​檢查點集合提供通用前綴,而不是完整的文件名。

output_graph定義結果凍結GraphDef將被保存的位置。由於它可能包含很多重量值,這些重量值佔用文本格式的大量空間,因此它始終保存爲二進制文件。 output_node_names是要從中提取圖形結果的節點的名稱列表。這是必要的,因爲凍結過程需要了解圖的哪些部分實際上是需要的,哪些是訓練過程的工件,如彙總操作。只有那些有助於計算給定輸出節點的操作將被保留。如果你知道你的圖將如何被使用,這些應該只是你傳遞給Session :: Run()作爲你的獲取目標的節點的名字。如果您沒有這方面的信息,可以通過運行summarize_graph工具來獲得有關可能產出的一些建議。

因爲TensorFlow的輸出格式已經隨時間變化了,所以還有其他各種不太常用的標誌可用,例如input_saver,但是希望你不應該在用現代版本的框架訓練過的圖表上需要這些標誌。

+0

我感謝您的回覆。在嘗試了很多東西之後,我已經有了我的凍結圖。現在我想爲我的android應用程序使用它。我目前有這個[問題](https://stackoverflow.com/questions/46577833/using-bi-lstm-ctc-tensorflow-model-in-android)。 –

相關問題