我正在体验CoreML在一个项目中的功能。这是我设法做到的:

  • 在Python中使用scikit-learn创建.pkl文件
  • 使用coremltools包
  • 将其转换为.mlmodel文件
  • 将其下载到我的iOS应用程序
  • 在运行时进行编译:
    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>)
    

    有任何想法吗 ?

    最佳答案

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

    关于ios - 动态加载mlmodel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46725723/

    10-10 14:46