我想在Android上测试Python下的学习模型,我在Tensorflow 0.9上测试。 为此,我将我的图形冻结为具有图形和权重的单个pb文件。我使用队列来管理我的学习批次。
在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来支持Op&#39; RandomShuffleQueue&#39;与这些attrs [[Node:shuffle_batch / random_shuffle_queue = RandomShuffleQueuecapacity = 10750,component_types = [DT_FLOAT,DT_FLOAT],container =&#34;&#34;,min_after_dequeue = 10000,seed = 0,seed2 = 0,shapes = [[10000], [8]],shared_name =&#34;&#34;]]
似乎调用了批处理生成层(我的图像是100x100,我有8个输出),但我不知道为什么。
通过直接在Mac上使用image_labelling.cc(使用Bazel构建)测试具有相同输入/输出层的相同模型时,我没有错误。
我不明白为什么在测试时需要RandomShuffleQueue。我错过了一些东西来指定我想要使用的图形部分吗?即使没有使用,图表的所有图层都会得到验证吗?
感谢。
答案 0 :(得分:1)
我仍在处理此文档,但我认为optimize_for_inference脚本可以帮助您:
传入冻结图,输入节点和输出节点,并删除所有其他不需要的操作。