Mon modèle keras avec la forme d'entrée (none, 40 [pas de temps], 12 [caractéristiques]) ressemble à ceci:Comment formater des données d'entrée pour un conv1d/LSTM nn coreml converti de keras
model = Sequential([
Conv1D(nodes_per_layer, filter_length, subsample_length=2, activation='relu', input_shape=(timesteps, data_dim), name='accelerations'),
Conv1D(nodes_per_layer, filter_length, subsample_length=1, activation='relu'),
LSTM(nodes_per_layer, return_sequences=True),
LSTM(nodes_per_layer, return_sequences=False),
Dropout(dropout),
Dense(num_classes),
Activation('softmax', name='scores'),
])
Après convertir en .mlmodel, je l'ajoute à ma XCodeProject:
Je puis essayer de faire l'inférence et obtenir des scores de prédiction:
func makePredictionRequest(currentScaledMotionArrays: [[Double]]) {
let data = _currentScaledMotionArrays.reduce([], +) //result is of type [Double] with 480 elements
do {
let mlMultiArray = try MLMultiArray(shape:[40,12], dataType:MLMultiArrayDataType.double)
for (index, element) in data.enumerated() {
mlMultiArray[index] = NSNumber(value: element)
}
let input = PredictionModelInput(accelerations: mlMultiArray)
let predictionOutput = try _predictionModel.prediction(input: input)
}
catch {
print(error.localizedDescription)
}
}
Mais la predictionModel.prediction (entrée: input) échoue toujours et renvoie l'erreur suivante:
"Le modèle s'attend à ce que la fonction d'entrée lstm_1_h_in soit un tableau, mais l'entrée est de type 0."
Les états masqués des couches lstm doivent donc être initialisés. Je ne sais pas si ce comportement est attendu, puisque je n'ai jamais rencontré le même problème auparavant. Ni en faisant inférence dans keras lui-même ou avec google cloud ml. Je ne connais pas non plus les valeurs initiales, qui sont habituellement choisies pour l'inférence. Peut-être juste des tableaux de zéros? Quelqu'un at-il fait face à un problème similaire? Le fichier .mlmodel a été trouvé here.
Quel est le message d'erreur réelle? –
Stupide moi, je viens de copier le code de la documentation Apple sans vraiment rattraper l'erreur. J'ai changé ma question en conséquence. – Lausbert