向 MLMultiArray 添加元素
Posted
技术标签:
【中文标题】向 MLMultiArray 添加元素【英文标题】:Adding elements to a MLMultiArray 【发布时间】:2020-04-20 18:57:05 【问题描述】:我有一个 CoreML 模型(使用 TF 创建并转换为 CoreML)。为它
input is: MultiArray (Double 1 x 40 x 3)
output is: MultiArray (Double)
我将获得这些 [a,b,c] 元组,需要收集其中的 40 个,然后再发送到模型进行预测。我正在查看 MLMultiArray 文档并被卡住了。可能是因为我是 Swift 的新手。
我有一个名为 modelInput 的变量,我想初始化它,然后当元组进入时,将它们添加到 modelInput 变量中。
modelInput = MLMultiArray(shape:[1,40,3], dataType:MLMultiArrayDataType.double))
调用后,modelInput.count 为 120。所以我猜测创建了一个空数组。
但是现在我想在元组进入时添加它们。我不知道该怎么做。 为此,我有一个 currCount 变量,每次调用后都会更新。但是,以下代码给了我一个错误。
"Value of type 'UnsafeMutableRawPointer' has no subscripts"
var currPtr : UnsafeMutableRawPointer = modelInput.dataPointer + currCount
currPtr[0] = a
currPtr[1] = b
currPtr[2] = c
currCount = currCount + 3
如何更新 multiArray?
我的方法是否正确?这是为预测输入创建多数组的正确方法吗?
我还想打印 MLMultiArray 的内容。不过,似乎没有任何辅助函数可以做到这一点。
【问题讨论】:
【参考方案1】:您可以使用指针,但您必须将原始指针更改为类型化指针。例如:
let ptr = UnsafeMutablePointer<Float>(OpaquePointer(multiArray.dataPointer))
ptr[0] = a
ptr[1] = b
ptr[2] = c
【讨论】:
嗨,马蒂斯。我有一个使用 JSON 文件加载到我的应用程序中的 FP 32 值数组。数组的形状是 [1, 12, 128, 192]。然后我创建了一个 MLMultiArray 如下:let data = try? MLMultiArray(shape: [1, 12, 128, 192], dataType: .int32) 那么,我现在如何将数据放入这个 MLMultiarray 呢?您能否提供一个代码示例或指出我正确的方向?顺便说一句,喜欢你的 CoreML 书。谢谢 由于数据在数组中的顺序已经正确,只是数据类型不同。所以你可以简单地做一个for
循环来遍历数组中的元素,将它们转换为Int32
并将其放入MLMultiArray
中。
您好 Matthijs,感谢您的提示。我试过这段代码:let yHat = try? MLMultiArray(shape: [1, 12, 128, 192], dataType: .float32) for i in 0..
【参考方案2】:
我想通了。我必须这样做——
modelInput[currCount+0] = NSNumber(floatLiteral: a)
modelInput[currCount+1] = NSNumber(floatLiteral: b)
modelInput[currCount+2] = NSNumber(floatLiteral: c)
我不能使用原始指针来访问元素。
【讨论】:
以上是关于向 MLMultiArray 添加元素的主要内容,如果未能解决你的问题,请参考以下文章