2016-06-08 80 views
1

我想加载一个模型,我在tensorflow android应用程序上训练了自己。我在Caffe中训练了模型,然后将其转换为Tensorflow,但我确信这不是问题,因为我使用classify.py对其进行了测试,并且它可以正常工作。Android应用程序在加载训练后的tensorflow protobuf模型后崩溃

然后我序列化模型并将其放入.pb中,我用我的替换tensorflow_inception_graph.pb(并将其命名为相同)。我可以使用bazel构建应用程序,但是当我将它安装在手机上并运行它时,它会立即崩溃。我认为罪魁祸首是以下错误:

F/native (26026): tensorflow_jni.cc:309 Error during inference: Invalid argument: No OpKernel was registered to support Op 'FIFOQueue' with these attrs 
F/native (26026): [[Node: processed_queue = FIFOQueue[capacity=1, component_types=[DT_INT32, DT_FLOAT], container="", shapes=[[], [224,224,3]], shared_name=""]()]] 

但我真的不知道如何解决它。

此外,apk有整个protobuf里面。

感谢您的帮助。

回答

1

不幸的是,您遇到了TensorFlow的移动构建目标限制。默认情况下,我们只包含推理通常需要的操作,不包括FIFOQueue。

假设您在移动设备的推理过程中不需要运行该操作,可以使用strip_unused.py脚本并传入输入和输出操作名称。这将除去在给定输入节点处开始输出直接需要的操作,所以应去除FIFOQueue和其他训练操作。