首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中运行tflite分类器(Kotlin)

在Android中运行tflite分类器(Kotlin)
EN

Stack Overflow用户
提问于 2021-07-22 16:24:42
回答 1查看 150关注 0票数 1

我用python开发了一个分类器,并将其转换为tflite模型。之后,每当我在python中运行分类器时:

代码语言:javascript
运行
复制
import tensorflow as tf
import numpy as np
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test the model on random input data.
input_data = np.array([[566, 12, 12, -12, 1, 7, 1, 1, 1, -1]], dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()

# The function `get_tensor()` returns a copy of the tensor data.
# Use `tensor()` in order to get a pointer to the tensor.
[[output_data]] = interpreter.get_tensor(output_details[0]['index'])
print(output_data) # prints 0.99999845

我得到一个有效的输出。

在Android (kotlin)中,我使用了以下代码:

代码语言:javascript
运行
复制
val model = Model.newInstance(this)
val inputFeature0 = TensorBuffer.createFixedSize(intArrayOf(1, 10), DataType.FLOAT32)
var byteBuffer = ByteBuffer.allocate(4 * 10)
for (value in floatArrayOf(566f, 12f, 12f, -12f, 1f, 7f, 1f, 1f, 1f, -1f)) {
   byteBuffer.putFloat(value)
}
inputFeature0.loadBuffer(byteBuffer)
val outputs = model.process(inputFeature0)
val result = outputs.outputFeature0AsTensorBuffer.floatArray[0]
print(result) // 0.51473397
model.close()

在python中,每当我更改输入值时,输出都会相应地更改,但在Android (kotlin)中,输出(结果)保持不变

请帮助我理解我在Kotlin中做错了什么,以便预测(处理模型)总是给我相同的结果(输入被改变)

EN

Stack Overflow用户

回答已采纳

发布于 2021-07-22 16:27:16

我不确定如何使用bytebuffer,问题一定在那里,因为下面这行代码返回了正确的结果:

代码语言:javascript
运行
复制
inputFeature0.loadArray(floatArrayOf(566F, 12F, 12F, -12F, 1F, 7F, 1F, 1F, 1F, -1F))

所以用loadArray替换你的加载缓冲区

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68481519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档