java.lang.IllegalArgumentException:无法在形状为[2]的TensorFlowLite张量和形状为[1、2]的Java对象之间进行复制 [英] java.lang.IllegalArgumentException: Cannot copy between a TensorFlowLite tensor with shape [2] and a Java object with shape [1, 2]

查看:75
本文介绍了java.lang.IllegalArgumentException:无法在形状为[2]的TensorFlowLite张量和形状为[1、2]的Java对象之间进行复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've trained my own model for image classification model in keras and i converted it into tflite then i want to use that model in android through tensorflow lite. for this i used a github project to get my hands directly on the app link to the project is here:

https://github.com/amitshekhariitbhu/android-tensorflow-lite-example/tree/master/app/src/main/java/com/amitshekhar/tflite

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

But i have got this error in the 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模型和资产文件夹中的labels.txt文件的输入大小外,我没有对代码进行任何更改.

Any help regarding this will be appreciated and furthermore i have not make any changes in the code except input size of my model and my own tflite model and labels.txt files in assets folder.

推荐答案

我已经解决了我的问题.我的.h5 keras模型到tflite的转换过程中存在问题.因此,这导致了错误的输出张量.因此,面对此问题的任何人都应确保

I have solved my problem. It was an issue with the conversion process of my .h5 keras model into tflite. So, that resulted in wrong output tensor. So anyone who face this should assure that in

  1. 您的sndroid应用程序输入大小应与模型中指定的大小相同.

  1. Your sndroid application input sizes should be like specified in the model.

始终使用此出色的工具在转换前后检查您的模型,这是下面工具的链接.

Always check your model before and after conversion with this wonderful tool here is the link to the tool below.

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

[Netron visualizer tool for all types of models]

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

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

[Google Colab笔记本]

[Google Colab Notebook]

> https://colab.research.google.com/drive/1wgy0vqS6IRO0rHju7l_scrollTo = 0tZma5ebnzZN

谢谢..

这篇关于java.lang.IllegalArgumentException:无法在形状为[2]的TensorFlowLite张量和形状为[1、2]的Java对象之间进行复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆