2016-09-19 10 views
0

アンドロイドで学習したモデルをPythonでテストしたいのですが、私はTensorflow 0.9です。 これを行うには、私のグラフをフリーズし、グラフと重量のある単一のpbファイルを作成しました。キューを使用して学習バッチを管理しました。Android/Tensorflow:テストにRandomShuffleQueueが必要なのはなぜですか?

私のセッションをAndroidで実行しているとき、私は入力テンソルを自分のネットワークの入力としての "input_node"という名前で指定します。それがされてはならないので、バッチ世代が前に行われ

std::vector<std::pair<std::string, tensorflow::Tensor> > input_tensors({{"input_node", input_tensor}}); 
s = session->Run(input_tensors, output_names, {}, &output_tensors); 

X = tf.reshape(X, [-1, W, H, 1], name="input_node") 

と "output_node" 層を呼び出します。ここでは

output = tf.reshape(h_fc11, shape=[-1, 8], name="output_node") 

はtensorflow_jni.ccで呼び出しですテスト時に使用されます。 しかし、私は次のようなエラーがあります。推論中 tensorflow_jni.cc:312エラー:無効な引数:いいえOpKernelはこれらattrsに [[ノードとオペアンプ 'RandomShuffleQueue' をサポートするために登録されました:shuffle_batch/random_shuffle_queue = RandomShuffleQueuecapacity = 10750、component_types =を[ [10000]、[8]]、shared_name = ""]]

バッチ生成レイヤーが呼び出されます(私の画像は100x100で、8つの出力を持っています)が、なぜか分かりません。

同じモデルを同じ入出力層でテストしても、Macのimage_labelling.cc(Bazelを使用しています)を直接テストすると、エラーは発生しません。

テスト時にRandomShuffleQueueが必要な理由がわかりません。私が使用したいグラフの部分を指定するために何かが欠けていますか?使用しない場合でもグラフのすべてのレイヤーが検証されますか?

ありがとうございました。

答えて

1

私はまだこのための文書に取り組んでいますが、私はoptimize_for_inferenceスクリプトがここであなたを助けるべきだと思う:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/optimize_for_inference.py

あなたが凍結されたグラフ、入力ノード、出力ノードを渡し、必要のない他の操作をすべて削除します。

+0

ありがとう@Pete、本当に便利な機能。私はTensorflow 0.9を使用してそれを適応させようとしていますが、それはマスターと0.9(graph_util、node_def_pb2、strip_unused_lib ...)の間に多くの違いがあるようです。これがうまくいくと思いますか? – CHR

関連する問題