2016-09-19 69 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