Tensorflow lite模型请求的缓冲区大于所需的缓冲区

Tensorflow lite模型请求的缓冲区大于所需的缓冲区,tensorflow,tensorflow-lite,Tensorflow,Tensorflow Lite,我在tensorflow中使用keras创建了一个自定义模型。我使用的版本是tensorflow nightly 1.13.1。我使用官方工具构建tensorflow lite模型(方法tf.lite.TFLiteConverter.from_keras_model_文件) 创建模型后,我检查了输入形状,似乎没有什么不好的 tensorflow lite模型中的输入和输出形状为: [{'name': 'input_1', 'index': 59, 'shape': array([ 1, 240

我在tensorflow中使用keras创建了一个自定义模型。我使用的版本是tensorflow nightly 1.13.1。我使用官方工具构建tensorflow lite模型(方法tf.lite.TFLiteConverter.from_keras_model_文件)

创建模型后,我检查了输入形状,似乎没有什么不好的

tensorflow lite模型中的输入和输出形状为:

[{'name': 'input_1', 'index': 59, 'shape': array([ 1, 240, 240, 3], dtype=int32), 'dtype': , 'quantization': (0.0, 0)}] [{'name': 'dense/Softmax', 'index': 57, 'shape': array([1, 6], dtype=int32), 'dtype': , 'quantization': (0.0, 0)}] [{'name':'input_1','index':59,'shape':数组([1,240,240,3],dtype=int32),'dtype':,'quantization':(0.0,0)}] [{'name':'densite/Softmax','index':57,'shape':数组([1,6],dtype=int32),'dtype':,'quantization':(0.0,0)}] 您可以注意到输入形状是1*240*240*3,所以我希望缓冲区的大小是172800个单位

但是,当我尝试在android设备上运行该模型时,我收到了下一个错误:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.megacode, PID: 15067 java.lang.RuntimeException: Unable to create application com.megacode.base.ApplicationBase: java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite buffer with 691200 bytes and a ByteBuffer with 172800 bytes. at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5771) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1648) E/AndroidRuntime:致命异常:主 进程:com.megacode,PID:15067 java.lang.RuntimeException:无法创建应用程序com.megacode.base.ApplicationBase:java.lang.IllegalArgumentException:无法在691200字节的TensorFlowLite缓冲区和172800字节的ByteBuffer之间转换。 位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:5771) 位于android.app.ActivityThread.-wrap2(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1648) 我不明白为什么模型要求输入691200个单位的形状


如果有人提出建议,我将不胜感激

您是正确的,输入形状包含1*240*240*3个元素

但是,每个元素的类型为int32,每个元素占用4个字节


因此,ByteBuffer的总大小应该是1*240*240*3*4=691200。

我今天早上发现了这个答案。我使用了来自bytebuffer对象的方法“put”,但是当我使用方法“putFloat”时,一切都很好(首先增加bytebuffer的大小)。你的回答证实了我的猜测。谢谢