2016-09-19 70 views
0

我想測試一個學習模型下的Android上的Python,我在Tensorflow 0.9。 這樣做,我凍結了我的圖形有一個單一的圖形和重量的PB文件。我使用Queues來管理我的學習批次。Android/Tensorflow:爲什麼需要測試RandomShuffleQueue?

在Android上運行我的會話時,我通過名稱「input_node」指定輸入張量,該輸入張量是我的網絡中輸入的數據層。

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電話:

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

批生成之前完成,因此它不應該被在測試時使用。 但我有以下錯誤:推斷期間 tensorflow_jni.cc:312錯誤:無效的說法:沒有OpKernel登記支持歐普 'RandomShuffleQueue' 這些ATTRS [節點:shuffle_batch/random_shuffle_queue = RandomShuffleQueuecapacity = 10750,component_types = [ DT_FLOAT,DT_FLOAT],container =「」,min_after_dequeue = 10000,seed = 0,seed2 = 0,shapes = [[10000],[8]],shared_name =「」]]

看起來批量生成圖層被稱爲(我的圖像是100x100,我有8個輸出),但我不知道爲什麼。

當通過直接在Mac上(使用Bazel構建)通過image_labelling.cc測試具有相同輸入/輸出圖層的相同模型時,我沒有錯誤。

我不明白爲什麼測試時需要使用RandomShuffleQueue。我是否錯過了某些內容來指定我想要使用的圖形部分?即使不使用,圖表的所有圖層都會被驗證嗎?

謝謝。

回答

1

我還在爲這個文件上,但我認爲optimize_for_inference腳本應該幫助你在這裏:

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

你傳遞一個冷凍圖形,輸入節點和輸出節點,並刪除所有不需要的其他操作。

+0

謝謝@Pete,確實有用的功能。我使用的是Tensorflow 0.9,並嘗試對其進行調整,但它似乎與master和0.9(graph_util,node_def_pb2,strip_unused_lib ...)之間存在許多差異。你認爲這可行嗎? – CHR