當前位置:
首頁 > 知識 > 詳解蘋果Core ML:如何為iOS創建機器學習應用?

詳解蘋果Core ML:如何為iOS創建機器學習應用?

選自developer.apple

機器之心編譯

參與:吳攀

在昨天開幕的 WWDC 2017 開發者大會上,蘋果宣布了一系列新的面向開發者的機器學習 API,包括面部識別的視覺 API、自然語言處理 API,這些 API 集成了蘋果所謂的 Core ML 框架;參閱機器之心報道《蘋果開發者大會 WWDC 2017:首次全面展示蘋果的人工智慧實力》。軟體主管兼高級副總裁 Craig Federighi 介紹說,Core ML 的核心是加速在 iPhone、iPad、Apple Watch 上的人工智慧任務,支持深度神經網路、循環神經網路、卷積神經網路、支持向量機、樹集成、線性模型等。大會之後,蘋果開發者網站更新了相關文檔,對 Core ML 進行了更加詳細的介紹。機器之心在本文中對該文檔的內容進行了翻譯和整理。更多詳情可訪問原文檔。

Core ML 文檔地址:https://developer.apple.com/documentation/coreml

Core ML 介紹

使用 Core ML,你可以將訓練好的機器學習模型整合到你的應用中。它支持以下操作系統:

iOS 11.0+Beta

macOS 10.13+Beta

tvOS 11.0+Beta

watchOS 4.0+Beta

訓練好的模型(trained model)是將一個機器學習演算法應用到一個訓練數據集之後所得到的結果。然後該模型可以基於新的輸入數據而進行預測。比如,如果一個模型在一個地區的歷史房價數據上進行了訓練,那麼它就可能能夠根據房子的卧室和浴室數量來預測房價。

Core ML 是域特定的框架和功能的基礎。Core ML 支持用於圖像分析的 Vision;用於自然語言處理的 Foundation(比如 NSLinguisticTagger 類)和用於評估已經學習到的決策樹的 GameplayKit。Core ML 本身構建於低層面的原語(primitives)之上,比如 Accelerate、BNNS 和 Metal Performance Shaders。

Core ML 為設備性能進行了優化,從而減少了內存佔用和功耗。嚴格在設備上運行能夠確保用戶數據的隱私,並且能保證你的應用在沒有網路連接時也能夠工作和響應。

如何使用 Core ML?

獲取 Core ML 模型

如何將 Core ML 模型用在你的應用中?Core ML 支持大量機器學習模型,包括神經網路、數集成、支持向量機和廣義的線性模型。Core ML 需要 Core ML 格式(.mlmodel)。蘋果已經以該格式提供了一些流行的開源模型,請訪問:https://developer.apple.com/machine-learning。你可以下載這些模型,並用在你的應用中。另外,一些研究組和大學也會發布自己的模型和訓練數據,這些可能並不是 Core ML 模型格式的。要使用這些模型,請將其轉換成 Core ML 格式。

將 Core ML 模型用在你的應用中

下面給出了一個示例,將一個訓練好的模型 MarsHabitatPricer.mlmodel 用在了一個簡單應用中,以用來預測火星上的地價。

1. 將模型添加到你的 Xcode 項目

通過將模型拖拽到項目導航即可將該模型添加到你的 Xcode 項目。

你可以在 Xcode 中打開模型來查看關於該模型的信息——包括模型的類型及其需要的輸入和輸出。該模型的輸入是太陽能電池板和溫室的數量,以及棲息地的大小(單位:英畝)。該模型的輸出是該棲息地的預測價格。

2. 在代碼中創建模型

Xcode 也會使用關於該模型輸入和輸出的信息來自動生成一個該模型的自定義的編程介面,你可以在代碼中使用這些介面來和該模型進行交互。對於 MarsHabitatPricer.mlmodel,Xcode 會生成幾個介面,其中 MarsHabitatPricer 表示該模型,MarsHabitatPricerInput 表示該模型的輸入,MarsHabitatPricerOutput 則是該模型的輸出。

使用生成的 MarsHabitatPricer 類的初始化器來創建該模型:

let model = MarsHabitatPricer()

3. 將輸入值輸入該模型

這個示例應用使用了 UIPickerView 來獲取來自用戶的輸入值:

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)

4. 使用模型來做預測

MarsHabitatPricer 類有一個生成的 prediction(solarPanels:greenhouses:size:) 方法(method),可用於根據模型的輸入值預測一個價格。在這個案例中,輸入是太陽能電池板和溫室的數量,以及棲息地的大小(單位:英畝)。這個方法的結果是一個 MarsHabitatPricerOutput 實例 marsHabitatPricerOutput

guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels,

greenhouses: greenhouses, size: size) else {

fatalError("Unexpected runtime error.")

}

獲取 marsHabitatPricerOutput 的 price 屬性來獲取預測的價格,並將結果展示在該應用的用戶界面上:

let price = marsHabitatPricerOutput.price

priceLabel.text = priceFormatter.string(for: price)

註:生成的 prediction(solarPanels:greenhouses:size:) 方法可能會報錯。你會遇到的最常見的錯誤類型是你輸入該方法的數據的類型與該模型所需的輸入數據類型不符——比如,格式不對的圖片。在這個示例應用中,輸入是 Double 類型的。任何類型不匹配都會在編譯時顯現,對於這個示例應用而言,如果有什麼地方不對,它就會報出一個致命錯誤。

5. 構建和運行一個 Core ML 應用

Xcode 可以將該 Core ML 模型編譯成一個資源(resource),其已經為設備上的運行進行了優化。這種優化了的模型的表示被包含在你的應用捆綁(app bundle)中,而且該應用在設備上運行時會使用這個模型來進行預測。

將訓練好的模型轉換成 Core ML

如果你的模型是使用支持的第三方機器學習工具創建和訓練的,那麼你可以使用 Core ML Tools(https://developer.apple.com/machine-learning)將其轉換成 Core ML 模型格式。下表給出了支持的模型和第三方工具。

Core ML Tools 是一個 Python 包(coremltools),託管在 Python Package Index (PyPI) 上。要了解更多有關 Python 包的信息,請參閱:https://packaging.python.org

1. 轉換你的模型

使用對應你的模型的第三方工具的 Core ML 轉換器轉換你的模型。調用該轉換器的 convert 方法,並將結果保存為 Core ML 模型格式(.mlmodel)。比如,如果你的模型是用 Caffe 創建的,那麼將該 Caffe 模型(.caffemodel)轉遞給 coremltools.converters.caffe.convert:

import coremltools

coreml_model = coremltools.converters.caffe.convert("my_caffe_model.caffemodel")

然後將所得到的模型保存為 Core ML 模型格式:

coreml_model.save("my_model.mlmodel")

根據你模型的需要,你可能需要更新輸入、輸出和標籤,或者你可能需要聲明圖像名、類型、格式。這些轉換工具捆綁了更多文檔,因工具不同,其提供的選項也有所不同。

2. 你也可以編寫自定義的轉換工具

當你需要轉換一個不在上表中的格式的模型時,你也可以創建你自己的轉換工具。

編寫你自己的轉換工具涉及到將你的模型的輸入、輸出和架構的表示(representation)翻譯成 Core ML 模型格式。你需要定義該模型架構的每一層以及它們與其它層的連接。使用 Core ML Tools 提供的轉換工具為例;它們演示了通過第三方工具創建的多種類型的模型被轉換成 Core ML 模型格式的方法。

註:Core ML 模型格式是由一些協議緩衝文件(protocol buffer files)定義的,具體描述請參閱:https://developer.apple.com/machine-learning

Core ML API

這個文檔包含了正在開發中的 API 和相關技術的初步信息。這些信息可能會發生變化,遵循這個文檔實現的軟體應該在最後的操作系統軟體上進行測試。了解更多使用蘋果 Beta 軟體的信息,訪問:https://developer.apple.com/support/beta-software/

在大多數案例中,你僅需要與你的模型的動態生成的介面進行交互,這些介面是 Xcode 自動生成的。你可以使用 Core ML API 直接支持自定義的工作流和高級的用例。比如,如果你需要做預測,同時非同步地將輸入數據收集到一個自定義的結構中,你可以通過採用 MLFeatureProvider 協議來使用該結構來為你的模型提供輸入特徵。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

用機器學習「武裝」產品應用,蘋果的人工智慧時代降臨
機器學習入門很難?騙你的!
WWDC推出Core ML背後,盤點國內外機器學習已有的落地實踐
一文讀懂WWDC 2017:除了新產品新系統,今年的主題是機器學習

TAG:機器學習 |

您可能感興趣

蘋果推出Mac平台AI工具Create ML:可進行簡單機器學習
如何使用 Android Things 和 TensorFlow 在物聯網上應用機器學習
ClickHouse如何結合自家的GNDT演算法庫CatBoost來做機器學習
學習如何使用 Python 構建你自己的 Twitter 機器人
Mac上訓練機器學習模型,蘋果WWDC發布全新Create ML、Core ML 2
在Mac上訓練機器學習模型,蘋果WWDC發布全新Create ML、Core ML 2
用Scratch+IBM Watson實現機器學習
Windows Defender ATP機器學習和AMSI:發掘基於腳本的攻擊
Google推出AI晶元Edge TPU,可在邊緣運行TensorFlow Lite機器學習模型
使用TensorFlow,Kafka和MemSQL進行實時機器學習
DeepMind提出「SACX」學習範式,訓練機器人解決稀疏獎勵任務
開源機器學習伺服器——PredictionIO
蘋果機器人拆 iPhone ,誰敢 PK ?
DeepMind提出心智神經網路ToMnet,訓練機器的理解能力
Datalore:用於機器學習可視化的新Web方案!
微軟機器學習Machine Learning Studio學習筆記
揭秘MIT-IBM Watson AI,如何教機器識別行為
Facebook的Politibot機器人如何用技術重建媒體信任
用AI 打造遊戲,Unity 機器學習 Agent——ml-agents
Machine Learning:十大機器學習演算法