2017-06-09 2 views
1

J'ai un tableau de 40 tableaux avec 12 caractéristiques doubles, donc le type est [[double]]. Actuellement, j'envoie ces données à l'API Google Cloud ML pour obtenir une prédiction associée.Comment initialiser un MLMultiArray dans CoreML

Depuis Apple a récemment présenté CoreML et coremltools, je me suis converti mon modèle de keras à .mlmodel pour éviter des milliers d'appels api Google Cloud et une inférence directement sur mon iPhone:

coreml_model = coremltools.converters.keras.convert(new_Model, input_names=['accelerations'], 
                output_names=['scores']) 
coreml_model.save('PredictionModel.mlmodel') 

Après avoir ajouté le modèle à mon Projet Xcode, il ressemble à: enter image description here

Je ne sais pas d'où viennent ces autres entrées et sorties. Pour obtenir une prédiction, j'ai besoin de convertir mon tableau de tableaux de 12 doubles en MLMultiArray, mais je ne sais pas comment faire. Quelqu'un at-il fait face à un problème similaire? Voici mon approche inachevée actuelle:

_predictionModel = PredictionModel() 
guard let mlMultiArray = try? MLMultiArray(dataPointer: <#T##UnsafeMutableRawPointer#>, shape: <#T##[NSNumber]#>, dataType: <#T##MLMultiArrayDataType#>, strides: <#T##[NSNumber]#>, deallocator: <#T##((UnsafeMutableRawPointer) -> Void)?##((UnsafeMutableRawPointer) -> Void)?##(UnsafeMutableRawPointer) -> Void#>) else { 
     fatalError("Unexpected runtime error.") 
    } 
guard let predictionOutput = try? _predictionModel.prediction(accelerations: mlMultiArray, lstm_1_h_in: nil, lstm_1_c_in: nil, lstm_2_h_in: nil, lstm_2_c_in: nil) else { 
     fatalError("Unexpected runtime error.") 
    } 

La documentation connexe se trouvent here.

Répondre

2

je l'ai réalisé en lisant ce blog :)

let data = _currentScaledMotionArrays.reduce([], +) //result is of type [Double] with 480 elements 
guard let mlMultiArray = try? MLMultiArray(shape:[40,12], dataType:MLMultiArrayDataType.double) else { 
    fatalError("Unexpected runtime error. MLMultiArray") 
} 
for (index, element) in data.enumerated() { 
    mlMultiArray[index] = NSNumber(floatLiteral: element) 
} 
let input = PredictionModelInput(accelerations: mlMultiArray) 
guard let predictionOutput = try? _predictionModel.prediction(input: input) else { 
     fatalError("Unexpected runtime error. model.prediction") 
} 
+0

Je vais avoir le même problème, mais je ne sais pas comment commencer, mes données d'entrée est une image. Donc, il sera très utile si quelqu'un comment le faire. – drasick

+0

peut-être que [exemple] (https://github.com/yulingtianxia/Core-ML-Sample/blob/master/CoreMLSample/ViewController.swift) pourrait vous aider? – Lausbert