本文主要讲述CoreML的一次全流程实践。
Core ML模型支持很多第三方机器学习工具创建和训练的模型的转换,比如Caffe, Keras, scikit-learn, XGBoost等。利用上述工具创建和训练的模型可以通过Core ML Tools工具将模型转换为Core ML模型的格式。目前Core ML Tools不支持3.x版本的python,可以自己用虚拟环境装一个2.7版本的python。然后利用pip工具安装coremltools和numpy等框架。
本文主要分为一下几个部分
1.建立一个scikit-learn线性模型
2.转化成CoreML模型
3.使用CoreML进行预测
建立一个scikit-learn线性模型
用sublime或者其他编辑器建立一个python脚本。利用numpy框架建立一个随机数集。
import numpy as np
x_values = np.linspace(-2.25,2.25,300)
y_values = np.array([np.sin(x) + np.random.randn()*.25 for x in x_values])
然后利用线性回归模型来训练模型。
from sklearn.linear_model import LinearRegression
lm = LinearRegression().fit(x_values.reshape(-1,1), y_values)
转化成CoreML模型
Core ML除了支持线性模型外,还支持许多机器学习模型,比如神经网络模型,基于树的模型等。Core ML模型的格式是以.mlmodel 结尾。首先进行模型转换,然后导入作者信息,还有其他元数据等,最后保存转换后的模型。
from coremltools.converters import sklearn
coreml_model = sklearn.convert(lm)
coreml_model.author = "WJ"
print(coreml_model.author)
coreml_model.short_description = "I approximate a sine curve with a linear model!"
coreml_model.input_description["input"] = "a real number"
coreml_model.output_description["prediction"] = "a real number"
print(coreml_model.short_description)
coreml_model.save('linear_model.mlmodel')
使用CoreML进行预测
新建一个xcode工程,直接拖入刚才训练好的linear_model.mlmodel。点击这个模型,可以看到一些模型信息。
然后点开Model Class中的箭头,可以看到模型暴露的方法。linear_modelInput和linear_modelOutput类一个表示输入类,一个表示输出类。linear_model是一个用来预测的类。
然后拖入一个输入的textfield和输出的textfield用来显示,再监听输入的值,来预测输出的值。
参考
1.Leverage Scikit-Learn Models with Core ML
2.Core ML and Vision: Machine Learning in iOS 11 Tutorial
3.详解苹果Core ML:如何为iOS创建机器学习应用
4.Build more intelligent apps with machine learning.
5.Core ML
6.Converting Trained Models to Core ML