致命的例外:推理。无法从Java缓冲区复制到TensorFlowLite tensor

致命的例外:推理。无法从Java缓冲区复制到TensorFlowLite tensor,tensorflow,tensorflow-lite,image-classification,Tensorflow,Tensorflow Lite,Image Classification,我在Android Studio中开发了一个,但是我有一个小问题。当我尝试运行应用程序时,出现以下常见错误: java.lang.IllegalArgumentException:无法从9408字节的java缓冲区复制到3136字节的TensorFlowLite tensor(提供默认\u conv2d\u输入:0)。 我知道这可能是来自模型的输入张量与代码中的缓冲区不匹配。但这太让人困惑了,因为我的代码会自动适应模型中图像的大小以及它需要的所有信息。所以我想知道错误在哪里 // Reads t

我在Android Studio中开发了一个,但是我有一个小问题。当我尝试运行应用程序时,出现以下常见错误:

java.lang.IllegalArgumentException:无法从9408字节的java缓冲区复制到3136字节的TensorFlowLite tensor(提供默认\u conv2d\u输入:0)。

我知道这可能是来自模型的输入张量与代码中的缓冲区不匹配。但这太让人困惑了,因为我的代码会自动适应模型中图像的大小以及它需要的所有信息。所以我想知道错误在哪里

// Reads type and shape of input and output tensors, respectively.
    int imageTensorIndex = 0;
    int[] imageShape = tflite.getInputTensor(imageTensorIndex).shape(); // {1, height, width, 1}
    imageSizeY = imageShape[1];
    imageSizeX = imageShape[2];
    DataType imageDataType = tflite.getInputTensor(imageTensorIndex).dataType();
    int probabilityTensorIndex = 0;
    int[] probabilityShape =
        tflite.getOutputTensor(probabilityTensorIndex).shape(); // {1, 10}
    DataType probabilityDataType = tflite.getOutputTensor(probabilityTensorIndex).dataType();

// Creates the input tensor.
    inputImageBuffer = new TensorImage(imageDataType);
也许这就是问题所在。。。我正在创建这样的imageShape{1,height,width,1},数据类型是FLOAT32,所以它应该是{1,height,width,4},对吗

另一个原因可能是元数据。但是我用元数据填充模型,我有一个.json,我不知道如何使用它


注意:如果你想让笔记本做.tflite,.

张量缓冲区大小由数据大小(float32:4字节)*张量形状的平面大小(1*高度*宽度*1)决定


因此,上面的代码片段需要准备一个带有形状(1,高度,宽度,1)的浮点输入张量数据,而不是形状(1,高度,宽度,4)。

我试过了,但没有成功,它出现了相同的错误。。。但是在另一行中^^^似乎我们正在修正代码ty:3“感谢您的帮助”是不正确的,并且在问题中也没有帮助。请看。此外,当有人回答问题时,编辑问题使其答案不充分是不合适的。请参阅上的这篇文章。如果需要的话,最好是直接链接到这个。