出货后不断训练CoreML模型

时间:2017-06-09 14:19:49

标签: ios11 coreml metal-performance-shaders

在查看新的CoreML API时,我看不到在生成.mlmodel并将其捆绑到您的应用程序后继续训练模型的任何方法。这让我觉得我无法对用户的内容或动作进行机器学习,因为模型必须事先经过完全训练。

有没有办法在发货后将训练数据添加到我训练过的模型中?

编辑:我刚刚注意到你可以从URL初始化生成的模型类,所以也许我可以将新的训练数据发布到我的服务器,重新生成训练模型并将其下载到应用程序中?似乎它会起作用,但这完全打败了在没有用户数据离开设备的情况下能够使用ML的隐私方面。

7 个答案:

答案 0 :(得分:9)

.mmodel文件由Xcode编译成.mlmodelc结构(实际上是应用程序包中的一个文件夹)。

您的应用可能能够从服务器下载新的.mlmodel,但我不认为您可以从应用内部运行Core ML编译器。

也许您的应用程序可以从服务器下载已编译的.mlmodelc数据,将其复制到应用程序的Documents目录中,然后从中实例化该模型。试试看。 ; - )

(这假设App Store在打包应用程序并将其发送给用户之前不对.mlmodelc数据进行任何其他处理。)

答案 1 :(得分:6)

Apple最近为设备上的模型编译添加了new API。现在您可以下载模型并在设备上进行编译

答案 2 :(得分:2)

Core ML支持推理,但不支持设备培训。

您可以通过从服务器替换新模型来更新模型,但这值得提出自己的问题。

答案 3 :(得分:2)

为了动态更新模型(不更新整个应用程序),您需要直接使用MPS(金属性能着色器)而不是依赖于.mlmodel,它必须与应用程序捆绑在一起。

这意味着您需要通过编写一些Swift代码来手动构建神经网络(而不是使用coremltools直接转换现有模型),并为每个图层提供各种权重,这有点工作,但不是火箭科学。

如果您想了解有关MPS的更多信息,这是一个很好的视频。

https://developer.apple.com/videos/play/wwdc2017/608/

答案 4 :(得分:2)

现在使用iOS11 beta4,您可以编译模型,从服务器下载。

Details

答案 5 :(得分:1)

CoreML 3现在支持设备上模型的个性化。您可以为每个用户改进模型,同时将其数据保密。

https://developer.apple.com/machine-learning/core-ml/

答案 6 :(得分:1)

作为将 mlmodel 与应用程序捆绑在一起的替代方法,您可以下载并在 CoreML 应用程序中编译模型。为此,您只需使用例如 URLSessionmodel definition 文件下载到用户的设备上。在此之后,您必须通过调用抛出 model definition 类型的方法来编译 compileModel(at:)

let newCompiledModel = try MLModel.compileModel(at: modelDescriptionURL)

您将获得一个与模型描述同名的新编译模型文件,但其结尾将是 mlmodelc。最后,通过将编译后的模型 URL 传递给其初始化程序来创建一个新的 MLModel 实例。

let model = try MLModel(contentsOf: newCompiledModel)

但是,请记住,编译过程可能很耗时,不应在主线程上完成。