Caffeと同様に、CoreMLでもMLFeatureProviderという形式でデータを与え、predictionFromFeaturesを呼び出すことで、float配列から推論を行うことができます。

任意のfloat配列からMLFeatureProviderを取得するには、MLMultiArrayにfloat配列を書き込み、MLMultiArrayを持つNSMutableDictionaryを作成し、NSMutableDictionaryからMLDictionaryFeatureProviderを生成することになります。このとき、ディクショナリのキーはmlmodelの入力層の名前になります。

NSArray *shape = @[@1, [NSNumber numberWithInt:src_w], [NSNumber numberWithInt:src_z], [NSNumber numberWithInt:src_y], [NSNumber numberWithInt:src_x]];
MLMultiArray* data = [[MLMultiArray alloc] initWithShape:shape dataType:MLMultiArrayDataTypeFloat32 error:&error];
int shape_size=1*src_w*src_z*src_y*src_x*sizeof(float);
memcpy( data.dataPointer, src, shape_size );
NSMutableDictionary *inputDict = [[NSMutableDictionary alloc] init];
inputDict[key] = data;
MLDictionaryFeatureProvider *inFeatures = [[MLDictionaryFeatureProvider alloc] initWithDictionary:inputDict error:&error];

mlmodelに対してpredictionFromFeaturesを呼び出すことで推論します。

id outFeatures = [model predictionFromFeatures:static_cast(inFeatures) error:&error];

処理結果はMLFeatureProviderで出力されます。ディクショナリのキーは出力層の名前になります。

NSSet *keys = [outFeatures featureNames];
MLFeatureValue *value = [outFeatures featureValueForName:key];
MLMultiArray* res=value.multiArrayValue;
double* fsrc = (double*)res.dataPointer;
float* fdst = (float*)dest;
for( int i=0; i<res.count; i++ ){
	fdst[i] = (float)fsrc[i];
}


predictionFromFeaturesとMLFeatureProviderの使い方はcoremltools/coremlpython/のソースコードを参照してください。

CoreMLの出力はdoubleですが、内部的にはMetalPerformanceShaderでhalf floatで実行されるそうです。How can I use half floats with CoreML neural nets?