java .lang.IllegalArgumentException: невозможно копировать между тензором TensorFlowLite с формой [2] и объектом Java с формой [1, 2] - PullRequest
0 голосов
/ 30 марта 2020

Я подготовил свою собственную модель для модели классификации изображений в кератах и ​​преобразовал ее в tflite, а затем хочу использовать эту модель в android через tenorflow lite. для этого я использовал проект 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)

Буду признателен за любую помощь в этом отношении, и, кроме того, я не вносил никаких изменений в код, кроме размера ввода моей модели и моей собственной модели tflite и файлов label.txt в папке assets.

1 Ответ

0 голосов
/ 31 марта 2020

Я решил свою проблему. Это была проблема с процессом преобразования моей модели .h5 keras в tflite. Итак, это привело к неверному выходному тензору. Поэтому любой, кто сталкивается с этим, должен убедиться, что в

  1. Размеры входных данных вашего приложения sndroid должны быть такими, как указано в модели.

  2. Всегда проверяйте свою модель до и после преобразования с помощью этого замечательного инструмента, вот ссылка на инструмент ниже.

[Средство визуализации Netron для все типы моделей]

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

Используйте этот блокнот для конвертации в .pb или .tflite. Я объяснил почти каждый шаг в этом для новичков.

[Google Colab Notebook]

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

Спасибо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...