Tensorflow Mobile App:不是有效的TensorFlow Graph序列化:NodeDef提到了Op中没有的attr"扩张"



我尝试在https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2中替换graph.pb文件但是它未能在Andriod中启动错误:

不是有效的TensorFlow图序列化:Nodedef提及不用op name = conv2d。

的"扩张"
12-16 15:06:24.986 4310-4310/org.tensorflow.demo E/AndroidRuntime: Caused by: java.io.IOException: Not a valid TensorFlow Graph serialization: NodeDef mentions attr 'dilations' not in Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_HALF, DT_FLOAT]; attr=strides:list(int); attr=use_cudnn_on_gpu:bool,default=true; attr=padding:string,allowed=["SAME", "VALID"]; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]>; NodeDef: conv0/Conv2D = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true](truediv, conv0/W). (Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.).
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.loadGraph(TensorFlowInferenceInterface.java:392)

如何使用正确的conv2d graphDef?

生成推理PB文件

我也有同样的问题,并试图遵循上述解决方法。(没有成功)

,但后来我重新评估了原始错误。"版本错过与TensorFlow匹配"

这使我找到了对我有用的(显而易见的)和简单的解决方案。

验证笔记本电脑上使用的TensorFlow版本以构建1.5.0

在Android Build中设置相同的版本。拍打额头....

dependencies {
            compile 'org.tensorflow:tensorflow-android:1.5.0'
        }

确保将其放在应用程序gradle文件中。

dependencies {
            compile 'org.tensorflow:tensorflow-android:+'
//                compile 'org.tensorflow:tensorflow-android:1.2.0-preview'
             }

我也有同样的问题。如下所述,此错误似乎是由于用于运行训练脚本的TensorFlow版本与您的Android应用程序中包含的库版本的版本不匹配。

要解决此问题,您可以尝试以下内容:

  • 从http://ci.tensorflow.org/view/nightly/job/nightly/job/nightly-andly/lastsuccessuccessfulbuild/artifact/
  • 下载夜间构建libtensorflow_**
  • 在根Android演示项目目录中创建一个名为" libs"的目录(除了"资产"," src"," jni"等),然后在其中复制(下载的) libandroid_tensorflow_inference_java.jar
  • 在" libs"内部,创建一个名为" Armeabi-V7a"的目录(或与您的体系结构匹配的任何内容),然后在其中复制下载的libtensorflow_demo.solibtensorflow_inference.so文件(对应于该体系结构)
  • 在build.gradle中,设置nativeBuildSystem = 'none'并修改最后的"依赖项",如下:

    依赖项{ if(nativebuildsystem =='cmake'|| andationbuildSystem =='none'){ 实现文件('libs/libandroid_tensorflow_infered_java.jar') } }

  • 编译,上传到测试设备并运行应用程序。它对我有用。

最新更新