java.lang.IllegalArgumentException:无法在形状为 [2] 的 TensorFlowLite 张量和形状为 [1, 2] 的 Java 对象之间复制

Abd*_*hab 0 android machine-learning tensorflow tensorflow-lite

我已经在 keras 中训练了我自己的图像分类模型模型,并将其转换为 tflite 然后我想通过 tensorflow lite 在 android 中使用该模型。为此,我使用了一个 github 项目来直接获取该项目的应用程序链接:

https://github.com/amitshekhariitbhu/Android-TensorFlow-Lite-Example/tree/master/app/src/main/java/com/amitshekhar/tflite

但是我在 logcat 中遇到了这个错误:

2020-03-30 14:50:48.747 27421-27421/com.amitshekhar.tflite E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.amitshekhar.tflite, PID: 27421
    java.lang.IllegalArgumentException: Cannot copy between a TensorFlowLite tensor with shape [2] and a Java object with shape [1, 2].
        at org.tensorflow.lite.Tensor.throwIfShapeIsIncompatible(Tensor.java:342)
        at org.tensorflow.lite.Tensor.throwIfDataIsIncompatible(Tensor.java:305)
        at org.tensorflow.lite.Tensor.copyTo(Tensor.java:183)
        at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:166)
        at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:311)
        at org.tensorflow.lite.Interpreter.run(Interpreter.java:272)
        at com.amitshekhar.tflite.TensorFlowImageClassifier.recognizeImage(TensorFlowImageClassifier.java:70)
        at com.amitshekhar.tflite.MainActivity$1.onImage(MainActivity.java:75)
        at com.wonderkiln.camerakit.EventDispatcher$1.run(EventDispatcher.java:42)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7094)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:536)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:928)
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助将不胜感激,此外,除了我的模型的输入大小和我自己的 tflite 模型和资产文件夹中的 labels.txt 文件之外,我没有对代码进行任何更改。

Abd*_*hab 6

我已经解决了我的问题。这是我的 .h5 keras 模型到 tflite 的转换过程的问题。所以,这导致了错误的输出张量。所以任何面对这种情况的人都应该确保在

  1. 您的 android 应用程序输入大小应该与模型中指定的一样。

  2. 使用这个很棒的工具在转换前后始终检查您的模型,这里是下面工具的链接。

[适用于所有类型模型的 Netron 可视化工具]

https://www.electronjs.org/apps/netron

  1. 使用此笔记本转换为 .pb 或 .tflite。我也为新手解释了其中的几乎每一步。

[Google Colab 笔记本]

https://colab.research.google.com/drive/1wgy0vqS6IRO0rHju7l_InCUiatCo85y6#scrollTo=0tZma5ebnzZN

谢谢..