Core ML Apple官方文檔

在iOS平臺上,可以使用Core ML來集成經(jīng)過訓練的機器學習模型到你的APP。

對一組訓練數(shù)據(jù)應用機器學習算法會生成一個經(jīng)過訓練的模型,該模型會根據(jù)輸入數(shù)據(jù)來進行預測。例如,根據(jù)某個地區(qū)的歷史房價進行培訓的模型可能能夠在給定房屋的臥室和浴室數(shù)量時,預測該房屋的價格。

Core ML是框架和功能的基礎, Core ML對Vision的圖像分析,自然語言處理基礎(例如NSLinguisticTagger類)和用于評估學習決策樹的GameplayKit提供了支持。 Core ML本身建立在Accelerate和BNNS以及Metal Performance Shader的底層庫之上。

獲得Core ML模型

Core ML支持各種機器學習模型,包括神經(jīng)網(wǎng)絡,樹組合,支持向量機和廣義線性模型。 Core ML需要使用Core ML格式的模型(文件擴展名為.mlmodel的模型)。

蘋果提供了幾種流行的,已經(jīng)是Core ML格式的開源模式。 您可以下載這些模型并開始在你的APP中使用它們。 另外,各研究組和大學發(fā)布了他們的模型和培訓數(shù)據(jù),這些數(shù)據(jù)可能不是Core ML格式的模型。 要使用這些模型,您需要轉換它們,這些將在后續(xù)內容中會有具體介紹。

集成Core ML到你的APP

下面會集成一個簡單的模型到APP里,然后傳入數(shù)據(jù)到模型,并產(chǎn)出模型預測結果。
該示例應用程序使用經(jīng)過訓練的模型MarsHabitatPricer.mlmodel來預測火星上的棲息地價格。

添加模型到你的的Xcode項目

將模型拖放到項目導航目錄中就可以將模型添加到Xcode項目里。

您可以通過打開Xcode中的模型來查看有關模型的信息(包括模型類型及其預期輸入和輸出)。 模型的輸入數(shù)據(jù)是太陽能電池板和溫室的數(shù)量,以及棲息地的面積(按英畝)。 模型的輸出就是棲息地的預測價格。

在代碼中創(chuàng)建模型

Xcode還可以使用模型根據(jù)輸入、輸出信息自動生成的自定義編程接口,并可在代碼中與模型進行交互。 例如MarsHabitatPricer.mlmodel,Xcode生成了表示模型的(MarsHabitatPricer),模型輸入(MarsHabitatPricerInput)和模型輸出(MarsHabitatPricerOutput)的接口。

使用生成的MarsHabitatPricer類的初始化方法來創(chuàng)建模型:

letmodel =MarsHabitatPricer()

獲取輸入值以傳遞給模型

該示例使用UIPickerView從用戶獲取模型的輸入值:

funcselectedRow(forfeature: Feature)->Int{

    returnpickerView.selectedRow(inComponent: feature.rawValue)

}

letsolarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)

letgreenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)

letsize = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)
使用模型進行預測

MarsHabitatPricer類有一個自動生成的預測方法(solarPanels:greenhouses:size :),用于根據(jù)模型的輸入值預測價格-- 在當前情況下,這些輸入值是指太陽能電池板的數(shù)量,溫室的數(shù)量和棲息地的大小(英畝)。 該方法的結果是一個MarsHabitatPricerOutput實例marsHabitatPricerOutput。

guardletmarsHabitatPricerOutput =try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size)else{

fatalError("Unexpected runtime error.")

}

從marsHabitatPricerOutput的price屬性中可以獲取預測價格,并在APP的UI中顯示結果。

letprice = marsHabitatPricerOutput.price

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

注意:

自動生成的預測(solarPanels:greenhouses:size :)方法可能會發(fā)生錯誤。 在使用Core ML時遇到的最常見的錯誤類型發(fā)生在你傳遞給該方法的輸入數(shù)據(jù)類型與模型所期望的輸入類型不匹配時,例如,錯誤格式的圖像。 在該APP中,輸入的類型為Double。 任何類型的不匹配在編譯時被捕獲,如果發(fā)生錯誤,示例APP會觸發(fā)一個致命錯誤。

建立和運行Core ML APP

Xcode會將Core ML模型編譯成經(jīng)過優(yōu)化以在設備上運行的資源。 該模型的優(yōu)化已經(jīng)包含在您的APP bundle中,并且表現(xiàn)在APP在設備上進行預測的過程中。

將訓練模型轉換為Core ML模型

將使用第三方機器學習工具創(chuàng)建的訓練模型轉換為Core ML模型的格式。

如果你的模型是使用已支持的第三方機器學習工具創(chuàng)建和訓練的,則可以使用Core ML Tools將其轉換為Core ML模型的格式。 表1列出了支持的型號和第三方工具。

  • 注意

Core ML Tools是一個Python包(coremltools),托管在Python包索引(PyPI)上。 有關Python包的信息,請參閱Python Packaging User Guide.。


表1 Core ML Tools支持的模型和第三方工具

轉換模型

使用與模型的第三方工具相對應的Core ML轉換工具轉換模型。 調用轉換工具的convert方法并將生成的模型保存為Core ML模型的格式(.mlmodel)。

例如,如果您的模型是使用Caffe創(chuàng)建的,請將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')

根據(jù)您的模型類別,您可能需要更新輸入,輸出和標簽,或者你可能需要聲明相應的名稱,類型和格式。因為可用的選項因工具而異,轉換工具還有很多文檔。 有關Core ML Tools的更多信息,請參閱Package Documentation.

編寫自定義轉換工具

當您需要轉換的模型不是表1所列工具支持的格式時,可以創(chuàng)建自己的轉換工具。

編寫自己的轉換工具涉及到將模型的輸入,輸出和架構的表示轉換為Core ML模型的格式。 您可以通過定義模型架構的每一層及其與其他層的連接來實現(xiàn)。 可以使用Core ML Tools提供的轉換工具作為參照; 他們演示了如何將從第三方工具創(chuàng)建的各種模型類型轉換為Core ML模型的格式。

  • 注意

Core ML模型格式由一組暫時協(xié)議文件定義,并在Core ML Model Specification中有詳細描述。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容