准备更新 Core ML 模型

Prepping to update a Core ML Model

Core ML 3 现在让我们能够在设备上进行训练。创建可更新的 Core ML 模型后,我们需要使用需要 3 个参数的 MLUpdateTask 函数执行一些功能以在设备上更新它:Model URLMLBatchProviderMLModelConfiguration.

由于 Core ML 3 刚刚发布,它的文档非常有限;特别是关于如何准备训练数据或 MLBatchProvider

问题:如何准备训练数据或创建MLBatchprovider

要向 Core ML 提供数据,您需要创建一个 MLFeatureProvider 对象。这 return 一个或多个 MLFeatureValue 对象,一个对应模型中的每个输入。通常 auto-generated class 在幕后执行此操作。

如果您想使用批处理,您可以创建一个 MLBatchProvider,它有多个 MLFeatureProviders,每个示例一个。

进行 MLBatchProvider 预测并不难:只需将 MLFeatureProviders 放入数组中,然后使用 MLArrayBatchProvider。同样,auto-generated class 有一个帮助方法。

对于训练,您可能需要加载数据 on-the-fly、进行随机扩充等。在这种情况下,您需要制作一个采用 MLBatchProvider 协议的新 class。每个示例应该 return 和 MLFeatureProvider。这次 MLFeatureProvider 不仅有示例的 MLFeatureValue,还有目标/真实标签的 MLFeatureValue。 (auto-generated class 有一个帮助程序 class 用于此训练功能提供程序,但没有用于训练批处理提供程序。)

我还没有真正让任何新的训练 API 工作(它们在 beta 2 上崩溃),所以我还不能 100% 确定 MLBatchProvider 将如何循环整个时代训练示例。

如果您的模型命名为 TestModel,则应该可以使用 TestModelTrainingInput class。

let singleTrainingData = try TestModelTrainingInput(input: .init[1,2,3], output_true: .init([4,5,6]))
let trainingData = MLArrayBatchProvider(array: [singleTrainingData])