前言:机器学习是这两年比较热门的一个话题,今天简单和大家分享一下,苹果的机器学习框架Core ML。有别于大家熟知的Caffe和TensorFlow,Core ML是一个无需编程经验,亦可上手的机器学习框架。
1.介绍Core ML
在 app 中整合机器学习模型。
利用 Core ML 在 app 中整合机器学习模型。Core ML 为所有模型提供了一种统一的呈现方式。App 可以使用 Core ML API 和用户数据进行预测,以及训练或精调模型,一切都在用户设备上完成。
“模型”是对一组训练数据应用机器学习算法而得到的结果。可以使用模型来对新的输入数据进行预测。有很多依靠编写代码,很难完成的任务,使用模型能更好地完成。例如,可以训练模型来归类照片,或者直接根据像素检测照片内的特定对象。
可以使用 Xcode 内置的 Create ML app 来构建和训练模型。使用 Create ML 训练的模型采用 Core ML 模型格式,并能直接在 app 中使用。模型下载到用户设备上后,可以使用 Core ML 在设备端利用用户数据进行重新训练或优化。
Core ML 通过利用 CPU、GPU 和神经网络引擎,同时最大程度地减小内存占用空间和功耗,来优化设备端性能。由于模型严格地在用户设备上,因此无需任何网络连接,这有助于保护用户数据的私密性和 app 的响应速度。
Core ML 支持使用Vision(计算机视觉)框架分析图像,使用Nature(自然语言) 框架处理文本,使用Speech(语音) 框架将音频转换为文本,以及使用 SoundAnalysis 来识别音频中的声音。Core ML 本身是基于 Accelerate (英文) 和 BNNS (英文) 等底层语言以及 Metal Performance Shaders (英文) 而构建的。
2.如何创建机器学习模型
下图是Apple提供的可供选择的机器学习模型分类:
这里给大家举例创建图像分类器模型:
概述
图像分类器是一种识别图像的机器学习模型。当给它一个图像时,它会以该图像的类别标签进行响应。
您可以通过向图像分类器展示许多已经标记的图像示例来训练它。例如,可以通过收集大象、长颈鹿、狮子等的照片来训练图像分类器来识别动物。
图像分类器完成训练后,可以评估其准确性,如果表现足够好,则将其保存为 Core ML 模型文件。然后,您将模型文件导入您的 Xcode 项目,以在您的应用程序中使用图像分类器。
收集数据
每个类别至少使用 10 张图像,但请记住,图像分类器在处理更多样化的图像时效果更好。考虑包括从多个角度和不同照明条件下的每个类别的图像。
平衡每个类别的图像数量。例如,不要为一个类别使用 10 个图像,然后为另一个类别使用 1000 个图像。
图像可以是可以在 Quicktime Player 中打开的任何格式,例如 JPEG 和 PNG。它们不必是特定大小,也不必彼此大小相同。但是,最好使用至少 299 x 299 像素的图像。
组织你的训练数据
通过将图像分类到子文件夹来准备训练数据集。为每个子文件夹中包含的图像类别命名。例如,可以Cheetah为所有猎豹图像使用标签。
组织测试数据
使用测试数据集测试的模型是一种快速查看经过训练的模型在现实世界中表现如何的方法。
如果数据集有足够的图像,例如每个类别 25 个或更多,则通过复制训练数据集的文件夹结构来创建测试数据集。然后将每个类别中大约 20% 的图像移动到测试数据集中的等效类别文件夹中。
创建图像分类器项目
使用 Create ML 创建图像分类器项目。打开 Xcode,按住 Control 键单击 Dock 中的 Xcode 图标,然后选择 Open Developer Tool > Create ML。或者,从 Xcode 菜单中,选择 Open Developer Tool > Create ML。
在 Create ML 中,选择 File > New Project 查看模型模板列表。选择图像分类并单击下一步。
配置机器训练数据
将包含训练数据集的文件夹拖到项目窗口中的训练数据井中。
如果有测试的数据,可以将包含测试数据集的文件夹拖到项目窗口中的测试数据井中。
如果知道要在训练会话中使用多少次训练迭代,可以更改默认值的最大迭代次数。您还可以打开任何或所有图像增强功能。
每次扩充都会复制数据集的图像并应用变换或过滤器,从而有效地为数据集提供更多多样性,而无需收集额外的图像。
保存模型
当模型的准确度达到我们所期望时,将其保存到文件系统(以 Core ML 格式)。在“输出”选项卡中,使用以下任一选项保存模型:
- 单击保存按钮将模型保存到文件系统。
- 单击导出按钮以在 Xcode 中打开模型。
- 单击共享按钮将模型发送给其他人,例如通过邮件或消息。
- 将模型的图标拖到任何接受文件的地方。
将模型添加到代码中
最后一步是将训练好的模型添加到 Xcode 项目中。
要在代码中使用机器学习的模型:
if let img = info["UIImagePickerControllerOriginalImage"] as? UIImage {
let config = MLModelConfiguration()
guard let model = try? FriutsML(configuration: config), let cgImg = img.cgImage else{
return
}
if let inputt = try? FriutsMLInput(imageWith:cgImg ) {
if let output = try? model.prediction(input: inputt) {
self.classifier.text = output.classLabel
print("output \(output.classLabel)")
}else{
print("output error")
}
}
}