Core ML Apple官方文档

在iOS平台上,可以使用Core ML来集成经过训练的机器学习模型到你的APP。

对一组训练数据应用机器学习算法会生成一个经过训练的模型,该模型会根据输入数据来进行预测。例如,根据某个地区的历史房价进行培训的模型可能能够在给定房屋的卧室和浴室数量时,预测该房屋的价格。

Core ML是框架和功能的基础, Core ML对Vision的图像分析,自然语言处理基础(例如NSLinguisticTagger类)和用于评估学习决策树的GameplayKit提供了支持。 Core ML本身建立在Accelerate和BNNS以及Metal Performance Shader的底层库之上。

获得Core ML模型

Core ML支持各种机器学习模型,包括神经网络,树组合,支持向量机和广义线性模型。 Core ML需要使用Core ML格式的模型(文件扩展名为.mlmodel的模型)。

苹果提供了几种流行的,已经是Core ML格式的开源模式。 您可以下载这些模型并开始在你的APP中使用它们。 另外,各研究组和大学发布了他们的模型和培训数据,这些数据可能不是Core ML格式的模型。 要使用这些模型,您需要转换它们,这些将在后续内容中会有具体介绍。

集成Core ML到你的APP

下面会集成一个简单的模型到APP里,然后传入数据到模型,并产出模型预测结果。
该示例应用程序使用经过训练的模型MarsHabitatPricer.mlmodel来预测火星上的栖息地价格。

添加模型到你的的Xcode项目

将模型拖放到项目导航目录中就可以将模型添加到Xcode项目里。

您可以通过打开Xcode中的模型来查看有关模型的信息(包括模型类型及其预期输入和输出)。 模型的输入数据是太阳能电池板和温室的数量,以及栖息地的面积(按英亩)。 模型的输出就是栖息地的预测价格。

在代码中创建模型

Xcode还可以使用模型根据输入、输出信息自动生成的自定义编程接口,并可在代码中与模型进行交互。 例如MarsHabitatPricer.mlmodel,Xcode生成了表示模型的(MarsHabitatPricer),模型输入(MarsHabitatPricerInput)和模型输出(MarsHabitatPricerOutput)的接口。

使用生成的MarsHabitatPricer类的初始化方法来创建模型:

letmodel =MarsHabitatPricer()

获取输入值以传递给模型

该示例使用UIPickerView从用户获取模型的输入值:

funcselectedRow(forfeature: Feature)->Int{

    returnpickerView.selectedRow(inComponent: feature.rawValue)

}

letsolarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)

letgreenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)

letsize = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)
使用模型进行预测

MarsHabitatPricer类有一个自动生成的预测方法(solarPanels:greenhouses:size :),用于根据模型的输入值预测价格-- 在当前情况下,这些输入值是指太阳能电池板的数量,温室的数量和栖息地的大小(英亩)。 该方法的结果是一个MarsHabitatPricerOutput实例marsHabitatPricerOutput。

guardletmarsHabitatPricerOutput =try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size)else{

fatalError("Unexpected runtime error.")

}

从marsHabitatPricerOutput的price属性中可以获取预测价格,并在APP的UI中显示结果。

letprice = marsHabitatPricerOutput.price

priceLabel.text = priceFormatter.string(for: price)

注意:

自动生成的预测(solarPanels:greenhouses:size :)方法可能会发生错误。 在使用Core ML时遇到的最常见的错误类型发生在你传递给该方法的输入数据类型与模型所期望的输入类型不匹配时,例如,错误格式的图像。 在该APP中,输入的类型为Double。 任何类型的不匹配在编译时被捕获,如果发生错误,示例APP会触发一个致命错误。

建立和运行Core ML APP

Xcode会将Core ML模型编译成经过优化以在设备上运行的资源。 该模型的优化已经包含在您的APP bundle中,并且表现在APP在设备上进行预测的过程中。

将训练模型转换为Core ML模型

将使用第三方机器学习工具创建的训练模型转换为Core ML模型的格式。

如果你的模型是使用已支持的第三方机器学习工具创建和训练的,则可以使用Core ML Tools将其转换为Core ML模型的格式。 表1列出了支持的型号和第三方工具。

  • 注意

Core ML Tools是一个Python包(coremltools),托管在Python包索引(PyPI)上。 有关Python包的信息,请参阅Python Packaging User Guide.


表1 Core ML Tools支持的模型和第三方工具

转换模型

使用与模型的第三方工具相对应的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')

根据您的模型类别,您可能需要更新输入,输出和标签,或者你可能需要声明相应的名称,类型和格式。因为可用的选项因工具而异,转换工具还有很多文档。 有关Core ML Tools的更多信息,请参阅Package Documentation.

编写自定义转换工具

当您需要转换的模型不是表1所列工具支持的格式时,可以创建自己的转换工具。

编写自己的转换工具涉及到将模型的输入,输出和架构的表示转换为Core ML模型的格式。 您可以通过定义模型架构的每一层及其与其他层的连接来实现。 可以使用Core ML Tools提供的转换工具作为参照; 他们演示了如何将从第三方工具创建的各种模型类型转换为Core ML模型的格式。

  • 注意

Core ML模型格式由一组暂时协议文件定义,并在Core ML Model Specification中有详细描述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容