2017-10-13 71 views
1

我正在体验CoreML对于项目的容量。这是我能够做到的:动态加载mlmodel

  1. 使用使用coremltools包
  2. 下载到我的iPhone应用程序在Python
  3. scikit学习它转换为.mlmodel文件创建.pkl文件
  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!) 
    

现在,我想用我的模型做出预测。我在一个示例应用程序试图直接嵌入.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>) 

任何想法?

回答

2

最简单的解决方案:将Xcode生成的包装类复制到Swift文件中并将其添加到项目中。 (请注意,这个包装类也展示了如何制作一个MLFeatureProvider等)