【问题标题】:Android/Tensorflow: Why is RandomShuffleQueue needed for testing?Android/Tensorflow:为什么需要 RandomShuffleQueue 进行测试?
【发布时间】:2016-09-19 16:37:05
【问题描述】:

我想在 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 'RandomShuffleQueue' [[节点: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 上的 image_labelling.cc(使用 Bazel 构建)测试具有相同输入/输出层的相同模型时,我没有错误。

我不明白为什么在测试时需要 RandomShuffleQueue。我是否遗漏了一些东西来指定我想要使用的图表部分?图表的所有层即使不使用也验证了吗?

谢谢。

【问题讨论】:

    标签: android c tensorflow deep-learning


    【解决方案1】:

    我仍在为此编写文档,但我认为 optimize_for_inference 脚本应该对您有所帮助:

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

    您传入一个冻结图、输入节点和输出节点,它会删除所有其他不需要的操作。

    【讨论】:

    • 感谢@Pete,确实有用的功能。我正在使用 Tensorflow 0.9 并尝试对其进行调整,但 master 和 0.9 之间似乎有很多差异(graph_util、node_def_pb2、strip_unused_lib ...)。你认为这可行吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多