【问题标题】:Shaping input for a coremlmodel为 coremlmodel 塑造输入
【发布时间】:2019-01-29 16:02:39
【问题描述】:

我有一个 coremlmodel 输入形状为 MultiArray (Float32 67 x 256 x 320) 我很难确定这个模型的输入。 目前,我正在努力实现它,

var m = try! MLMultiArray(shape: [67,256,320], dataType: .double)
for i in 0...66{           
    var cost = rand((256,320)) // this is coming from swix [SWIX]
    memcpy(m.dataPointer+i*256*320, &cur_cost.flat.grid , 256*320)
}

稍后我将不得不用该大小的矩阵替换 rand。我首先将其用于测试目的。

任何关于如何塑造输入以适应音量的指针将不胜感激..

[SWIX]

【问题讨论】:

    标签: ios coreml onnx-coreml


    【解决方案1】:

    您的代码中似乎有问题的是您复制的是字节而不是双精度数。双精度为 8 个字节,因此您的偏移量应为 i*256*320*MemoryLayout<Double>.stride,而您要复制的数量应为 256*320*MemoryLayout<Double>.stride。

    请注意,您还可以使用 MLMultiArray 的 strides 属性来计算数组中给定数据元素的偏移量:

    let offset = i0 * strides[0].intValue + i1 * strides[1].intValue + i2 * strides[2].intValue 
    

    【讨论】:

    • 我刚刚从您在 github 上使用 CoreMLHelpers 的 repo 中看到了这一点。谢谢。但是,一个后续问题 - 有什么方法可以通过索引访问数组?例如,m[1] = array(256,320) 等,就像在 numpy 中 m[1,:,:] 将给出卷的第一片
    • 这很好,但现在你必须手动进行“切片”,通过计算切片开始位置的偏移量。
    猜你喜欢
    • 2021-09-30
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多