web-dev-qa-db-ja.com

テンソルフローモデルグラフが与えられ、入力ノード名と出力ノード名を見つける方法

Tensor flow Camera Demoの分類にカスタムモデルを使用します。 .bpファイルを生成し、そこに含まれる巨大なグラフを表示できました。 [ https://www.oreilly.com/learning/tensorflow-on-Android] に示されているように、このグラフを最適化されたグラフに変換するには、次の手順を使用できます。

$ bazel-bin/tensorflow/python/tools/optimize_for_inference  \
--input=tf_files/retrained_graph.pb \
--output=tensorflow/examples/Android/assets/retrained_graph.pb
--input_names=Mul \
--output_names=final_result

ここで、グラフ表示からinput_namesおよびoutput_namesを見つける方法。適切な名前を使用しないと、デバイスがクラッシュします。

E/TensorFlowInferenceInterface(16821): Failed to run TensorFlow inference 
with inputs:[AvgPool], outputs:[predictions]

E/AndroidRuntime(16821): FATAL EXCEPTION: inference

E/AndroidRuntime(16821): Java.lang.IllegalArgumentException: Incompatible 
shapes: [1,224,224,3] vs. [32,1,1,2048]

E/AndroidRuntime(16821):     [[Node: dropout/dropout/mul = Mul[T=DT_FLOAT, 
_device="/job:localhost/replica:0/task:0/cpu:0"](dropout/dropout/div, 
dropout/dropout/Floor)]]
16
Santle Camilus

これを試して:

pythonを実行

>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/your/path/to/graphname.pb','rb').read())

その後

>>> [n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Placeholder')]

その後、次のような結果を取得できます。

['Mul=>Placeholder', 'final_result=>Softmax']

しかし、エラーメッセージに関するノード名の問題かどうかはわかりません。グラフファイルをロードするときに間違った引数を指定したか、生成されたグラフファイルが間違っていると思いますか?

この部分を確認してください:

E/AndroidRuntime(16821): Java.lang.IllegalArgumentException: Incompatible 
shapes: [1,224,224,3] vs. [32,1,1,2048]

UPDATE:申し訳ありませんが、(再)トレーニングされたグラフを使用している場合は、これを試してください:

[n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Mul')]

(再)トレーニングされたグラフは、入力/出力op名を「Mul」および「Softmax」として保存し、最適化および/または量子化されたグラフは「Placeholder」および「Softmax」として保存するようです。

BTW、モバイル環境で再トレーニングされたグラフを使用することは、Peter Wardenの投稿によると推奨されません: https://petewarden.com/2016/09/27/tensorflow-for-mobile-poets / 。パフォーマンスとファイルサイズの問題のために、量子化されたグラフまたはメマップグラフを使用する方が良いでしょう。Androidしかし... :( Androidの量子化グラフ)

17
JP Kim

最近、私はこのオプションをテンソルフローから直接見つけました:

bazel build tensorflow/tools/graph_transforms:summarize_graph    
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph
--in_graph=custom_graph_name.pb
9
Santle Camilus