我正在尝试基于TensorFlow Android演示构建一个简单的Android应用程序;然而,我使用的模型需要一个内核Op,在默认情况下不包括在TensorFlow aar中。这使我走上了从源代码编译库的道路。
我已经让apk通过gradle构建,使用bazel作为本机构建工具;然而,每当我尝试从.pb文件(实际上是任何原型格式的模型)加载模型时,应用程序就会崩溃,错误声称模型是“无效的TensorFlow图序列化:无效的GraphDef”。
有人经历过这个问题吗?我猜有些东西没有正确编译,但我甚至不知道从哪里开始寻找错误。
下面是我使用的Bazel命令(为了方便起见,几乎逐字从演示中提取):
/usr/local/bin/bazel build -c opt
tensorflow/examples/android/app:tensorflow_native_libs
--crosstool_top=//external:android/crosstool --cpu=arm64-v8a
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain注意:build.gradle文件和Bazel文件基本上保持不变;我修改了一些路径(我将android示例移到子目录app/中,以允许多项目gradle设置),并包含了附加的所需内核Op.。
我尝试过的事物:
.pb文件的压缩作为gradle构建的一部分,因为这也是推荐的地方,也没有改变。.so文件替换JCenter提供的Tensorflow android中现有的JCenter文件,但这导致了同样的错误。.so文件并手动将它们放在适当的android项目目录中。发布于 2017-09-25 17:52:25
事实证明,这是我正在处理的TensorFlow提交的一个问题。当我从上游的TensorFlow回购中合并最近的变更时,错误就消失了。
我无法想象其他人会遇到这个问题;但是如果您遇到了这个问题,或者您遇到了类似的模糊错误,那么更新到更新版本的TensorFlow可能是您的解决方案。或者,您可以选择比我更聪明,并建立一个稳定的版本库。
https://stackoverflow.com/questions/46331371
复制相似问题