Формирование ввода для 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 
Другие вопросы по тегам