蘋果的說法:A trained model is the result of applying a machine learning algorithm to a set of training data. The model makes predictions based on new input data. For example, a model that's been trained on a region's historical house prices may be able to predict a house's price when given the number of bedrooms and bathrooms.
Core ML is the foundation for domain-specific frameworks and functionality. Core ML supports Vision for image analysis, Foundation for natural language processing (for example, the
NSLinguisticTagger
class), and GameplayKit for evaluating learned decision trees. Core ML itself builds on top of low-level primitives like Accelerate and BNNS, as well as Metal Performance Shaders.python
也就是說,coreML能夠集成不少機器學習的訓練模型到你的app進行一系列模型反射輸出,它不只支持層數超過30層的深度學習以外,還支持決策樹的融合,SVM(支持向量機),線性模型。因爲其底層創建在Metal 和Accelerate等技術上,因此能夠最大限度的發揮 CPU 和 GPU 的優點,咱們能夠直接在蘋果機器(iOS11以上)運行和使用模型,盜蘋果圖:
算法
再來張圖看看ML構成:
數組
Vision:這部分是關於圖像分析和圖像識別的。其中包括人臉追蹤,人臉識別,航標(landmarks),文本識別,區域識別,二維碼識別,物體追蹤,圖像識別等。xcode
natural language processing:這部分是天然語言處理的API,包括語言識別,分詞,詞性還原,詞性斷定,實體辨識。網絡
GamePlayKit:這部分的話,應該是製做遊戲時候,提供一些隨機數生成,尋找路徑(pathfinding),代理等操做,類人工智能的庫。app
它的底層由 Accelerate and BNNS((Basic neural network subroutines)) 和 Metal Performance Shaders(卷積神經網絡(CNN)使用先前得到的訓練數據實現和運行深刻學習。CNN是一種機器學習技術,它嘗試將視覺皮層建模爲卷積,整流,合併和歸一化步驟的序列。),框架集成了神經網絡,而且內核優化了圖形計算和大規模計算,讓App充分使用GPU框架
學習模型,我看來就是經過大量數據->規則算法->封裝成模型->負反饋優化算法模型dom
看看蘋果提供了什麼接地氣讓咱們對接使用模型的辦法和資源機器學習
上圖是蘋果支持的對應的模型及三方轉換,能夠對號入座,除此以外,咱們也能夠經過開放的轉換工具對三方訓練模型進行轉換爲coreML便可,同時也有開放一些開源的模型供開發者下載使用(主要支持Keras, Caffe, scikit-learn, libsvm, and XGBoost.),接下來,咱們來使用開源模型試試看。ide
開源的模型大小從25M到550M的不等,我選了箇中等的,100多M的Resnet50,主要是圖像識別
下載加入到工程,點擊能夠看到模型的基本信息,主要有三個部分
基本描述,生成的資源類,以及輸入參數,輸出參數(使用前詳細看看),生成的類也主要包括三個部分,輸入模型,輸出模型,以及輸入參數的基本轉換方法(嗯,看上去基本夠用了)
直接上代碼先:
//vision基本處理 Resnet50 *resnetModel = [[Resnet50 alloc] init]; VNCoreMLModel *vnCoreModel = [VNCoreMLModel modelForMLModel:resnetModel.model error:nil]; __weak typeof(ViewController) *weakSelf = self; VNCoreMLRequest *vnCoreMlRequest = [[VNCoreMLRequest alloc] initWithModel:vnCoreModel completionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) { for(VNClassificationObservation *classification in request.results){ NSLog(@"是什麼來的====%@ 識別率=====%@", classification.identifier,@( classification.confidence)); } [weakSelf arraySortDescL:request.results]; }]; VNImageRequestHandler *vnImageRequestHandler = [[VNImageRequestHandler alloc] initWithCGImage:image.CGImage options:nil]; NSError *error = nil; [vnImageRequestHandler performRequests:@[vnCoreMlRequest] error:&error]; if (error) { NSLog(@"error ========= %@",error.localizedDescription); } //模型提供 CGSize size = CGSizeMake(224, 224); UIImage *needImage = [self changeImage:image size:size]; CVPixelBufferRef imageRef = [self pixelBufferFromCGImage:needImage.CGImage]; Resnet50 *resnet50Model2 = [[Resnet50 alloc] init]; NSError *error2 = nil; Resnet50Output *output = [resnet50Model2 predictionFromImage:imageRef error:&error]; if (error2 == nil) { NSLog(@"是什麼來的====%@ 附加信息=====%@", output.classLabel,output.classLabelProbs); } else { NSLog(@"Error=======%@", error2.localizedDescription); }
兩種方式均可以對輸入參數進行模型輸出,一個是vision基本處理,圖像類的能夠經過vision處理,處理圖像的模型選擇你想要的就行,多個結果輸出,一個是模型提供的方法,單個結果輸出。其中第一種使用到了vision這個圖像識別分析的庫,主要用到了VNCoreMLModel,VNCoreMLRequest, VNImageRequestHandler,輸出的結果爲VNClassificationObservation類的集合數組,這是模型分析處理的預測結果,匹配率不一致,擇優, vision更多使用請看herehere:
二哈鎮樓
最後說一句,xcode9模擬器多了真機外框,賊好看...