Core ML(一):model简单使用
经过机器学习算法训练的模型将作为运用的结果。这个模型的预测基于新的输入数据。比如,根据一个区域的房价历史数据,结合卧室和浴室数量来预测房子的价格。
76309543.pngCore ML 是特定领域和功能的基础。Core ML 支持视觉图像分析,基础的自然语言处理(比如 NSLinguisticTagger 类)和GamepayKit ,评估和学习决策树,Core ML 本身构建在底层处理之上,像Accelerate (进行大规模的数学计算和图像计算,对高性能进行优化。
)和 BNNS(使用之前获得的训练数据来实现和运行神经网络。
)
Core ML 充分利用一台设备的性能,使用最少的内存和电量,严格地在设备上运行可以确保用户数据的隐私,并保证当网络连接不可用时,您的应用程序仍然具有功能性和响应性。
构建更多智能机器学习的应用
model | 说明 |
---|---|
MobileNet | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
SqueezeNet | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。虽然只有5 MB的内存空间,但是,压缩zenet与alex net的精度相同,但其参数却少了50倍。 |
Places205-GoogLeNet | 侦测到一个来自205个类别的图像的场景,如机场终端、卧室、森林、海岸等。 |
ResNet50 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
Inception v3 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等 |
VGG16 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
获取 Core ML 模型
获得Core ML模型用于你的APP
Core ML 支持多样化的机器学习模型,包括神经网络,集合树,支持向量机 和广泛的线性模型,Core ML 要求Core Model 模型格式(.mlmodel 文件扩展名).mlmodel 是通过第三方python来生成的,你可以通过python来制定你属于你自己业务模型
。
Apple 早已提供几个受欢迎,开源的Model格式化模型。你能在你的APP里下载并开始使用它们,此外,多方面的研究调查组和大学发布它们训练的模型,这可能不是核心的ML模型格式。如果你需要转换它们,你可以阅读以下:
Converting Trained Models to Core ML.
在你的APP集成Core ML
为APP添加下例模型,通过为model输入数据来进行模型预测
你能看见model中的信息,包括model的类型,期望的输入和输出。模型的输入是太阳能板和温室的数量,以及大量的栖息地(在英亩的土地上)。该模型的产量是栖息地的预期价格。
ef4547b6-2725-4185-989c-4daa9ba9aa77.png在代码中创建Model(Objective-C)
Xcode还使用模型的输入和输出信息来自动生成一个定制的编程接口到Model
拖入.mlmodel
比如MarsHabitatPricer.mlmodel
,XCode生成接口来代表这个model(MarsHabitatPricer)的输入输出
#import "MarsHabitatPricer.h"
MarsHabitatPricer *pricer = [[MarsHabitatPricer alloc]init];
将输入值传递给模型
//1. 实例化
MarsHabitatPricer *pricer = [[MarsHabitatPricer alloc]init];
//2.输入数据 太阳能板大小,数量,尺寸
MarsHabitatPricerInput *input = [[MarsHabitatPricerInput alloc]initWithSolarPanels:2.0 greenhouses:1.0 size:11];
//3. 建立输出数据 预测价格
MarsHabitatPricerOutput *output = [pricer predictionFromFeatures:input error:nil];
NSLog(@"-----%lf",output.price);
图像分类
通过Core ML 框架 ,您可以使用经过训练的机器学习模型来对输入数据进行分类。视觉框架与 Core ML 一起工作,将分类模型应用到图像上,对这些图像进行预处理,使机器学习任务更容易、更可靠。
+(void)getImage:(UIImage *)imgage{
CIImage *ci = [[CIImage alloc]initWithImage:imgage];
//11.0以上才能使用
if (@available(iOS 11.0, *)) {
MobileNet *mobileNet = [[MobileNet alloc]init];
NSError *error = nil;
//创建VNCoreMLModel
VNCoreMLModel *vncoreMMolder = [VNCoreMLModel modelForMLModel:mobileNet.model error:&error];
// 创建处理requestHandler
VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCIImage:ci options:@{}];
VNCoreMLRequest *request = [[VNCoreMLRequest alloc]initWithModel:vncoreMMolder completionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
NSMutableArray *arry = [NSMutableArray array];
for (VNClassificationObservation *classification in request.results) {
//接收识别率大于0.1的数据
if (classification.confidence > 0.1) {
NSNumber *number = [NSNumber numberWithFloat:classification.confidence];
NSDictionary *dict = @{@"name:":classification.identifier,@"confidence":number};
[arry addObject:dict];
}
}
NSLog(@"%@",arry);
}];
[handler performRequests:@[request] error:&error];
if (error) {
NSLog(@"error:%@",error.localizedDescription);
}
} else {
NSLog(@"iOS版本大于11.0方可使用");
}
}