我的 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)

第三步改成这样