动态加载 mlmodel
Loading mlmodel dynamically
我正在体验 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 在构建时创建包装器 class 以实例化输入:
let multiArr = try? MLMultiArray.init(shape: [1], dataType: .double)
let input = classifier1Input(input: multiArr!)
let output = try? model.prediction(input: input)
但是因为我在 运行 时间从服务器下载文件,所以我无法访问这种包装器 class。
let predict = model?.prediction(from: <MLFeatureProvider>)
有什么想法吗?
最简单的解决方案:将 Xcode 生成的包装器 class 复制到 Swift 文件中,并将其添加到您的项目中。 (请注意,此包装器 class 还展示了如何制作 MLFeatureProvider
等)
我正在体验 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 在构建时创建包装器 class 以实例化输入:
let multiArr = try? MLMultiArray.init(shape: [1], dataType: .double)
let input = classifier1Input(input: multiArr!)
let output = try? model.prediction(input: input)
但是因为我在 运行 时间从服务器下载文件,所以我无法访问这种包装器 class。
let predict = model?.prediction(from: <MLFeatureProvider>)
有什么想法吗?
最简单的解决方案:将 Xcode 生成的包装器 class 复制到 Swift 文件中,并将其添加到您的项目中。 (请注意,此包装器 class 还展示了如何制作 MLFeatureProvider
等)