我的 coremlmodel 在 swift 上给出了不同的输出
My coremlmodel gives different output on swift
我这样创建我的 MLMultiArray
var mlInput = try? MLMultiArray(shape: [1,2,12,120], dataType: MLMultiArrayDataType.float32)
并用我从 json 文件中获得的值填充它,如下所示
mlInput![0 * 12 * 120 + 0 * 120 + 5] = value as! NSNumber
基本上我取索引 0 超过 2 索引 0 超过 12 和索引 5 超过 120
并将其赋予如下模型
let obj = try! mlModel.prediction(input: ml3dmodelInput(input: mlInput))
并按照您看到的这些步骤得到结果。它给出了错误的预测输出。我在 python 中做了同样的事情来测试 coremlmodel 它与 python 一起工作得很好。我只是做了相同的步骤,用 json 中的值填充数组,将其提供给模型并获得输出。我做错了什么?
您应该使用数组的 strides
来计算索引。
如果数组的形状是 [A, B, C, D]
那么正确的索引是:
a * strides[0] + b * strides[1] + c * strides[2] + d * strides[3]
不过,您也可以简单地做:
mlInput[[a, b, c, d] as [NSNumber]] = value
仅使用 cpu 解决了问题。
let options = MLPredictionOptions()
options.usesCPUOnly = true
let obj = try! mlModel.prediction(input: ml3dmodelInput(input: mlInput), options: options)
第三步改成这样
我这样创建我的 MLMultiArray
var mlInput = try? MLMultiArray(shape: [1,2,12,120], dataType: MLMultiArrayDataType.float32)
并用我从 json 文件中获得的值填充它,如下所示
mlInput![0 * 12 * 120 + 0 * 120 + 5] = value as! NSNumber
基本上我取索引 0 超过 2 索引 0 超过 12 和索引 5 超过 120
并将其赋予如下模型
let obj = try! mlModel.prediction(input: ml3dmodelInput(input: mlInput))
并按照您看到的这些步骤得到结果。它给出了错误的预测输出。我在 python 中做了同样的事情来测试 coremlmodel 它与 python 一起工作得很好。我只是做了相同的步骤,用 json 中的值填充数组,将其提供给模型并获得输出。我做错了什么?
您应该使用数组的 strides
来计算索引。
如果数组的形状是 [A, B, C, D]
那么正确的索引是:
a * strides[0] + b * strides[1] + c * strides[2] + d * strides[3]
不过,您也可以简单地做:
mlInput[[a, b, c, d] as [NSNumber]] = value
仅使用 cpu 解决了问题。
let options = MLPredictionOptions()
options.usesCPUOnly = true
let obj = try! mlModel.prediction(input: ml3dmodelInput(input: mlInput), options: options)
第三步改成这样