动态加载mlmodel

时间:2017-10-13 08:32:23

标签: ios coreml

我正在体验CoreML对项目的能力。这就是我设法做的事情:

  1. 使用Python中的scikit-learn创建.pkl文件
  2. 使用coremltools软件包将其转换为.mlmodel文件
  3. 将其下载到我的iOS应用程序
  4. 在运行时编译:

    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!)
    
  5. 现在,我想用我的模型进行预测。我尝试在一个示例应用程序中直接嵌入.mlmodel文件,它允许XCode在构建时创建一个包装类来实例化输入:

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

    但是因为我在运行时从服务器下载文件,所以我无法访问这种包装类。

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

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案:将Xcode生成的包装类复制到Swift文件中并将其添加到项目中。 (请注意,此包装类还显示了如何创建MLFeatureProvider等。)