Core ML学习

Core ML,这是 个全新的机器学习基础框架,它 于全系 Apple 产品当中,其中包括 SiriCamera 以及 QuickTimeCore ML 提供 惊 的 速性能,能够轻松地集成机器学习模型,从 让您仅通过 代码就构建出更具智能的应用


Core ML 允许您将各种机器学习模型集成到 的应 当中。除 持超过 30 层类型的深度学习之外,它同样还 持诸如组合树、SVM、 义线性模型之类的标准模型。由于 Core ML是基于 MetalAccelerate 之类的底层技术 建立的,因此它可以 缝 CPU GPU 来提供最 效的性能和效率。您可以在设备上独立运 机器学习模型,因此数据 需离开执 分析的设备。


Vision

您可以轻松地将计算机视觉学习功能放到 的应 当中。Vision 所 持的功能包括 脸追踪、 脸识别、 脸特征点识别 (landmarks)、 本识别、矩形识别、条形码识别、对象追踪以及图像配准 (image registration)


然语 处

Foundation 中的 然语 处 API 使 机器学习,从 能够通过语 辨识、词语切分(tokenization)、词形还原 (lemmatization)、词性 (part of speech) 以及命名实体识别 (namedentity recognition) 来深入 解语 本。


获取 Core ML 模型

获取 Core ML 模型,以 能在您的应 当中使 。
Core ML 持多种机器学习模型,其中包括 神经 络 (Neural Network)

组合树 (Tree

Ensemble)、 持向 机 (Support Vector Machine) 以及 义线性模型 (Generalized LinearModel)Core ML 的运 需要使 Core ML 模型格式(也就是以 .mlmodel 扩展名结尾的模型)。

Apple 提供 些常 的开源模型供 家使 ,这些模型已经使 Core ML 模型格式。您可以 下载这些模型,然后就可以开始在应 中使 它们 。此外,其他的研究机构和 学都发布 不少机器学习模型和训练数据,这些往往都不是以 Core ML 模型格式发布出来的。如果您打算使 这些模型的话,需要对它们进 转换,具体内容详 「将已训练模型转换为Core ML」。

Core ML 模型集成到应 中向应 中添加 个简单的模型,然后向模型中传入输入数据,并对模型的预测值进 处 。

点击此处下载  应 。
概述

本 应 使 个已训练模型 MarsHabitatPricer.mlmodel, 以预测火星上的殖 地价值。

将模型添加到 Xcode 项 中
要想将模型添加到
Xcode 项 当中,只需要将模型拖曳进项 导航器 (project navigator)

中即可。

您可以通过在 Xcode 中打开这个模型,从 来查看它的相关信息,其中包括有模型类型以及其预期输入和输出。模型的输入为太阳能板和温室的数 ,以及殖 地的规模 (以英亩为单位)。模型的输出则是对这个殖 地价值的预测。

代码创建模型

Xcode 同样也会使 模型的输入输出信息,来 动为模型 成 个 定义的编程接 ,从 就可以在代码当中与模型进 交互。对于这个 MarsHabitatPricer.mlmodel Xcode 会 成相应的接 ,来分别表 模型本 (MarsHabitatPricer)、模型输入 (MarsHabitatPricerInput)以及模型输出 (MarsHabitatPricerOutput)

使 所 成的 MarsHabitatPricer 类的构造器, 可以创建这个模型:let model = MarsHabitatPricer()

获取输入值以传递给模型

应 使 UIPickerView,以 从 户那 获取模型的输入值。

func selectedRow(for feature: Feature) Int {
return pickerView.selectedRow(inComponent: feature.rawValue)

}

let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels),feature: .solarPanels)
let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses),feature: .greenhouses)
let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)
使 模型来进 预测

MarsHabitatPricer 类会 成 个名为 prediction(solarPanels:greenhouses:size:) 法,从 就可以根据模型的输入值来预测价值,在本 当中,输入值为太阳能板的数 、温室的数 以及殖 地的规模 (以英亩为单位)。这个 法的结果为 个 MarsHabitatPricerOutput 实 ,这 我们将其取名为 marsHabitatPricerOutput

guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels,greenhouses: greenhouses, size: size) else {

fatalError("Unexpected runtime error.")}

通过读取 marsHabitatPricerOutput price 属性,就可以获取所预测的价值,然后就可以在应 的 UI 当中对这个结果进 展 。

let price = marsHabitatPricerOutput.price
priceLabel.text = priceFormatter.string(for: price)
注意
所 成的
prediction(solarPanels:greenhouses:size:) 法会抛出异常。在使 Core ML 的时候,您 多数时候遇到的错误通常是:传递给 法的输入数据类型与模型预期的输入类型不同—— 如, 错误格式表 的图片类型。在 应 当中,预期的输入类型为 Double。所有的类型不匹配错误都会在编译时被捕获,如果遇到 某种错误,那么 应 就会弹出 个致命错误。
构建并运
Core ML

Xcode 会将 Core ML 模型编译到资源当中,从 进 优化并能够在设备上运 。优化过的模型表征会包含在您的应 程序包当中,在应 在设备上运 的时候,就可以 之来进 预测。

将已训练模型转换为 Core ML将由第三 机器学习 具所创建的已训练模型,转换为 Core ML 模型格式。

概述

如果您已经使 第三 机器学习 具来创建和训练模型,只要这个 具是受 持的,那么就可以使 Core ML Tools 来将这些模型转换为 Core ML 模型格式。表 1 出 我们 持的模

型和第三 具。

注意
Core ML Tools 是 个 Python (coremltools),并挂载在 Python Package Index (PyPI) 上。要 解关于 Python 包的 多信息,请参阅 Python Packaging User Guide
模型类型 持的模型 持的 具
神经 络
(Neural network) 前馈 (Feedforward)、卷积 (Convolutional)、循环 (Recurrent)Caffe / Keras 1.2.2
组合树 (Neural networks) 随机森 (Random Forests)、提升树 (Boosted Trees)、决策树(Decision Trees) scikit-learn 0.18 / XGBoost 0.6
持向 机 (Support vector machines) 标 回归 (Scalar Regression)、多级分类 (Multiclassclassification) scikit-learn 0.18 / LIBSVM 3.22
义线性模型 (Support vector machines) 线性回归 (Linear Regression)、逻辑回归(Logistic Regression) scikit-learn 0.18
特征 程 (Feature engineering) 稀疏向 化 (Sparse Vectorization)、稠密向 化(Dense Vectorization)、分类处 (Categorical Processing)scikit-learn 0.18
管道模型 (Pipeline models) 顺序链模型 (Sequentially Chained Models) scikit-learn 0.18模型转换

您可以使 Core ML 转换器,并根据对应的模型第三 具,来对模型进 转换。通过调 转换器的 convert 法,然后再将结果保存为 Core ML 模型格式 (.mlmodel)。 如,如果您的模型是使 Caffe 来创建的,您可以将 Caffe 模型 (.caffemodel) 传递给coremltools.converters.caffe.convert 法。

import coremltools
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
然后将结果保存为 Core ML 模型格式。

coreml_model.save('my_model.mlmodel')

根据您模型的不同,您可能会需要 新输入、输出以及相关的参数标签,或者您还可能会需要
声明图片名称、类型以及格式。转换 具内置  详细的 档,因为可 的选项因 具 异。

或者,还可以编写 定义的转换 具
如果您需要转换的格式不在表
1 当中,那么您可以创建 的转换 具。

编写 定义的转换 具,包括 将模型的输入、输出和架构表 转换为 Core ML 模型格式。您可以通过将每 层模型架构,以及层之间的连接关系进 定义,来实现这个操作。您可以通过 Core ML Tools 所提供的转换 具作为参考;它们演 如何将各种第三 具创建的模型

类型,转换为 Core ML 模型格式。

注意
Core ML 模型格式由 系 Protocol Buffer 件所定义,具体信息请参 Core ML ModelSpecification
Core ML API

直接使 Core ML API,从 持 定义 作流以及 为 级的 。在绝 多数情况下,您只需要与模型动态 成的接 进 交互即可,也就是说当您将模型添加到 Xcode 项 当中的时候,这个接 就由 Xcode 动创建完毕 。您可以直接使 Core MLAPI,以 持 定义 作流或者 为 级的 。举个 ,如果您需要将输入数据异步收集到 定义结构体,从 来执 预测的话,那么您就可以让这个结构体实现MLFeatureProvider 协议,从 来为模型提供输入功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值