2017-10-13 3 views
1

Je rencontre la capacité de CoreML pour un projet. Voici ce que je réussi à faire:Chargement mlmodel dynamiquement

  1. Création d'un fichier .pkl utilisant scikit-learn en Python
  2. Conversion à un fichier .mlmodel en utilisant package coremltools
  3. Téléchargement à mon application iOS
  4. compiler au moment de l'exécution:

    let classifierName = "classifier1" 
    let fileName = NSString(format:"%@.mlmodel",classifierName) 
    let documentsUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL! 
    let destinationFileUrl = documentsUrl.appendingPathComponent(fileName as String) 
    
    let compiledModelUrl = try? MLModel.compileModel(at: destinationFileUrl) 
    let model = try? MLModel(contentsOf: compiledModelUrl!) 
    

maintenant, je voudrais utiliser mon modèle Faire des prédictions. J'ai essayé dans un exemple d'application pour intégrer directement le fichier .mlmodel, qui permettent XCode de créer une classe wrapper au moment de la construction à l'entrée instancier:

let multiArr = try? MLMultiArray.init(shape: [1], dataType: .double) 
let input = classifier1Input(input: multiArr!) 
let output = try? model.prediction(input: input) 

Mais parce que je télécharge le fichier du serveur au moment de l'exécution, Je n'ai pas accès à ce genre de classe d'emballage.

let predict = model?.prediction(from: <MLFeatureProvider>) 

Des idées?

Répondre

2

Solution la plus simple: copiez cette classe wrapper générée par Xcode dans un fichier Swift et ajoutez-la à votre projet. (Notez que cette classe d'emballage montre également comment faire un MLFeatureProvider etc.)