翻译自:http://pythonhosted.org/coremltools/index.html
Core ML 是苹果提供的一个易于集成到app中的机器学习库. 它目前支持iOS, watchOS,macOS 和 tvOS. Core ML 引入了公共文件格式 (.mlmodel) ,它支持机器学习方法包括深度神经网络 (卷积和循环), 基于树的集合 (boosted trees, 随机森林, 决策树) 和广义 线性模型. Core ML 名可以直接集成到 Xcode中.
coremltools是一个Python工具包,用于:
将由知名的机器学习工具(包括 Keras, Caffe, scikit-learn, libsvm 和 XGBoost)训练的模型 转换为 Core ML 格式的模型(.mlmodel).
采用简单的API 编写 Core ML 格式模型.
做预测.
coremltools依赖以下库:
numpy (1.12.1+)
protobuf (3.1.0+)
此外, 如果你想转换第三方的训练模型,那么请安装以下依赖库:
Keras (==1.2.2) with Tensorflow (1.0.x, 1.1.x)
Xgboost (0.6+)
scikit-learn (0.15+)
libSVM
安装coremltools参考standard python package installation steps. 假如你已经安装python, 执行:
pipinstall-Ucoremltools
即可安装coremltools.
coremltools 使用支持的库来便捷的转换模型. 以下案例 展示了 如何将 Caffe 模型 (Inception) 转换为 Core ML格式 (.mlmodel)
支持的文件:bvlc_alexnet.caffemodel,deploy.prototxt,class_labels.txt
importcoremltools# Convert a caffe model to a classifier in Core MLcoreml_model=coremltools.converters.caffe.convert(('bvlc_alexnet.caffemodel','deploy.prototxt'),predicted_feature_name='class_labels.txt')# Now save the modelcoreml_model.save('BVLCObjectClassifier.mlmodel')
Here is another example with scikit-learn:
fromsklearn.linear_modelimportLinearRegressionimportpandasaspd# Load datadata=pd.read_csv('houses.csv')# Train a modelmodel=LinearRegression()model.fit(data[["bedroom","bath","size"]],data["price"])# Convert and save the scikit-learn modelimportcoremltoolscoreml_model=coremltools.converters.sklearn.convert(model,["bedroom","bath","size"],"price")
模型转换完, 你可以编辑模型的元数据,这些信息可以在XCode中展示出来. 许可证信息, 作者信息和其他的信息以及输入和输出描述信息.
# Set model metadatacoreml_model.author='John Smith'coreml_model.license='BSD'coreml_model.short_description='Predicts the price of a house in the Seattle area.'# Set feature descriptions manuallymodel.input_description['bedroom']='Number of bedrooms'model.input_description['bathrooms']='Number of bathrooms'model.input_description['size']='Size (in square feet)'# Set the output descriptionsmodel.output_description['price']='Price of the house'# Save the modelmodel.save('HousePricer.mlmodel')
模型转换完毕, 你可以使用Core ML 验证预测的结果并同原始模型进行对比. 为了采用代码的方式进行验证, 我们提供了一个简便的模型评估方式.
以下案例 我们采用已经转换后的HousePricer.mlmodel来做预测:
importcoremltools# Load the modelmodel=coremltools.models.MLModel('HousePricer.mlmodel')# Make predictionspredictions=model.predict({'bedroom':1.0,'bath':1.0,'size':1240})
Core ML 支持许多集成工具训练模型的转换. 下表列出了模型类型支持的转换工具:
模型 类型支持的工具包
神经网络Keras (1.2.2), Caffe 1.0
基于树的集合XGboost (0.6), scikit-learn 0.18.1
广义线性回归scikit-learn (0.18.1)
支持向量机libSVM (3.22), scikit-learn (0.18.1)
特征工程scikit-learn (0.18.1)
Pipelinesscikit-learn (0.18.1)
Core ML的重要组件是表示机器学习模型的公共规范. 这个规范定义在protobuf文件中,可以由protobuf支持的语言创建并使用(例如.Python, C++,Java, C#, Perl, 等等).
在上层, protobuf 规范由以下组成:
模型描述: 编码模型的输入和输出名称和类型信息.
模型参数: 代表一个特定实例模型的参数集合.
元数据: 模型的信息包括 来源, 许可证 和作者.