塑造 coreml 模型的输入
Shaping input for a coremlmodel
我有一个接受形状输入的 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)
}
稍后我将不得不用那个大小的矩阵替换兰特。我首先将其用于测试目的。
任何关于如何塑造输入以适应体积的指示将不胜感激..
[SWIX]
您的代码似乎有问题,您复制的是字节而不是双精度数。 double 是 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
我有一个接受形状输入的 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)
}
稍后我将不得不用那个大小的矩阵替换兰特。我首先将其用于测试目的。
任何关于如何塑造输入以适应体积的指示将不胜感激..
[SWIX]
您的代码似乎有问题,您复制的是字节而不是双精度数。 double 是 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