【发布时间】:2021-01-05 16:39:13
【问题描述】:
我的 tflite 模型的输入形状 - (18, 63) 或 1134 个数字。
我在 Objective-C 代码中获取数据本身,然后我将其发送到 swift 代码并且那里已经发生错误。详细我做了以下
- 接收 NSMutableArray 中的数据。数组长度为 1134 NSNumber
- 将 NSMutableArray 转换为 NSData
NSData *d = [NSKeyedArchiver archivedDataWithRootObject:_data];
NSLog(@"output: %@", d);
// output: {length = 18181, bytes = 0x62706c69 73743030 d4000100 02000300 ... 00000000 000034fd }
- 我将数据发送到 swift 代码。
Swift 代码:
@objc public func predict(_ data: NSData) {
guard
let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite")
else {
return
}
do {
let interpreter = try Interpreter(modelPath: modelPath)
try interpreter.allocateTensors()
let inputData: Data = data as Data
try interpreter.copy(inputData, toInputAt: 0) // <-- an error occurs in this line
try interpreter.invoke()
let outputTensor = try interpreter.output(at: 0)
} catch {
print(error)
}
}
- 我在上面的代码行中遇到错误。错误:
Provided data count 18181 must match the required count 4536.
H
【问题讨论】:
-
为什么未归档数据的长度是 18181,而你应该有 4536?
-
不知道为什么,就是一个不知道怎么修复的bug
-
我看到你将
NSMutableArray转换为NSData。转换后的 data 的长度为 18181 个 bytes(这表示存储在数组中的 1134 个 numbers)。在 swift 方面的某个地方,您需要将数据转换回数组,您必须 unarchive 数据以在 将其传递给模型之前将数组取回。 -
模型接受NSData/Data格式数据
-
好的,我没有 tflite 文档,也没有使用它,但是也许您需要将其转换为不同的数据,例如使用属性列表编码?文档应该给出一些如何转换为它期望的
NSData的工作示例?
标签: objective-c swift tensorflow-lite