2017-06-09 6 views
1

Ich habe ein Array von 40 Arrays mit 12 Doppel-Features, so ist der Typ [[double]]. Momentan sende ich diese Daten an die Google Cloud ML API, um eine entsprechende Vorhersage zu erhalten.Wie man ein MLMultiArray in CoreML initialisiert

Da Apple vor kurzem CoreML und coremltools eingeführt, umgerechnet ich mein Modell von keras zu vermeiden tausend von Google Cloud api Anrufen und Inferenz auf meinem iPhone direkt tun, um .mlmodel:

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

Nach dem Modell auf dem Hinzufügen meines Xcode Project sieht so aus: enter image description here

Ich habe keine Ahnung, woher diese anderen Ein- und Ausgänge kommen. Um eine Vorhersage zu bekommen, muss ich meine Array of Arrays von 12 Doppel zu einem MLMultiArray konvertieren, aber ich weiß nicht wie ich das machen soll. Hat jemand ein ähnliches Problem gehabt? Hier ist mein aktueller unvollendet Ansatz:

_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.") 
    } 

Die zugehörige Dokumentation here werden kann.

Antwort

2

ich erreicht es durch dieses das ich habe das gleiche Problem 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

lesen, aber ich weiß nicht, wie meine Eingangsdaten zu beginnen, ist ein Bild. Es wird also sehr hilfreich sein, wenn jemand wie es geht. – drasick

+0

vielleicht könnte dies [Beispiel] (https://github.com/yulingtianaxia/Core-ML-Sample/blob/master/CoreMLSample/ViewController.swift) helfen? – Lausbert

Verwandte Themen