Формирование ввода для 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]
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