CoreML框架是机器学习的核心框架,也是人工智能的核心内容之一。ML是machine learning(机器学习)的缩写!在苹果的开发着网站上有如下图示,其清晰的表示了机器学习模型使用到app中的过程
我们通过对机器学习的算法模型的数据转化,转化成我们app中可以进行使用的数据模型去显示通过算法分析得到的预算结果,例如一个在受过地区历史和房价上受过学习的模型,我们给定其卧室、浴室、地理位置信息去计算分析其房价。
ML是机器学习的核心框架:其支持各种机器学习模型,例如神经网络、树集成、支持向量机和广义线性模型等
特点:核心ML针对设备的性能进行了优化,从最小的内存占有以及资源消耗,并保证了用户数据的安全性,并切在无网络情况下也可以在功能上部分行的保障您的应用的功能完整和响应
层次结果图如下
根据上图我们可以了解到,CoreML是视觉处理,自然语言,gamePlayKit的核心模型,同时CoreML又是又更为底层的原语建立起来的一个封装层次
简单的使用
创建一个CoreML 学习模型
1、首先我们需要引入模型框架
import CoreML
创建一个经过训练的学习模型MarsHabitatPricer.mlmodel(火星栖息地价格预测学习模型,用于根据提供的数据去预测在火星上进行生存空间的代价计算,每个模型具有输入输出接口) 如下
let model = MarsHabitatPricer()
通过学习模型的输入接口去输入数据
/*通过pickView进行数据输入*/
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)
通过学习模型输出接口获取预测的生存代价
guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels,
/*错误抛出异常,通常是输入条件的不匹配造成的抛出异常*/
greenhouses: greenhouses, size: size) else {
fatalError("Unexpected runtime error.")
}
// 获取生存代价
let price = marsHabitatPricerOutput.price
priceLabel.text = priceFormatter.string(for: price)
将训练过的机器学习模型转化为核心的CoreML模型
如果使用的模型是第三方机器学习框架创建或者训练的模型,您可以使用核心ML工具或者第三方转化工具去将学习模型转化成Core ML模型,如果是自定义创建和培训则需要创建自己的转化工具进行模型转换
使用模型转换工具
核心CoreML tools是一个python包,它可以将各种模型进行转换,此表格列出支付的模型和第三方框架
Model type | Supported models | Supported frameworks |
Neural networks | Feedforward, convolutional, recurrent | Caffe v1 Keras 1.2.2+ |
Tree ensembles | Random forests, boosted trees, decision trees | scikit-learn 0.18 XGBoost 0.6 |
Support vector machines | Scalar regression, multiclass classification | scikit-learn 0.18 LIBSVM 3.22 |
Generalized linear models | 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 |
转换模型
例如,模型使用的是caff创建,则将caff模型传递给coremltools.converters.caffe方法进行模型转换
import coremltools
/*使用模型转换工具进行模型转换*/
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
/*进行模型保存*/
coremltools.utils.save_spec(coreml_model, 'my_model.mlmodel')