CreateML使用簡介

蘋果在去年推出了CoreML機器學(xué)習(xí)模型,今年在XCode10中提供的CreateML framework,可以創(chuàng)建CoreML模型。

使用CreateML創(chuàng)建CoreML模型時,僅需編寫少量的代碼。

準(zhǔn)備工作

1、XCode10(目前是beta版本)

2、MacOS Mojave(目前也是beta版本)

3、訓(xùn)練數(shù)據(jù):在同一個目錄下,以文件夾作為分類,各個文件夾下存放對應(yīng)分類的圖片

4、測試數(shù)據(jù):和訓(xùn)練數(shù)據(jù)一樣,并且文件夾分類的名稱要和訓(xùn)練數(shù)據(jù)的名稱一致

說明:

1、訓(xùn)練數(shù)據(jù)可以自己準(zhǔn)備,也可以從網(wǎng)上找一些,例如:Kaggle Cats and Dogs Dataset(本文是以Pets-100目錄下的圖片進(jìn)行的訓(xùn)練)

2、訓(xùn)練數(shù)據(jù)數(shù)量越大,訓(xùn)練的模型越準(zhǔn)確,訓(xùn)練的時間也就越長

創(chuàng)建圖像分類CoreML模型

1、運行XCode10,創(chuàng)建一個空的playground工程,清除所有代碼,然后將下面的代碼拷貝在playground中

import CreateMLUI

let builder = MLImageClassifierBuilder()

builder.showInLiveView()

2、切換顯示XCode的assistant editor,再點擊運行

MLImageClassifierBuilder的Live view

3、此時,XCode的assistant editor中,會顯示MLImageClassifierBuilder的live view,將訓(xùn)練數(shù)據(jù)的目錄拖拽進(jìn)來,XCode便開始訓(xùn)練CoreML模型了

拖拽數(shù)據(jù)進(jìn)行訓(xùn)練

4、將訓(xùn)練后的模型,保存到文件

保存ML模型
保存的ML模型

5、應(yīng)用創(chuàng)建的模型進(jìn)行預(yù)測:將想要預(yù)測的圖片(或目錄)拖拽到模型上,進(jìn)行預(yù)測。例如,將Pets-1000目錄拖拽到Live view上,預(yù)測的準(zhǔn)確率如下

說明:除了在Live view中進(jìn)行預(yù)測外,也可以將保存后的模型導(dǎo)入到app中使用。參見Classifying Images with Vision and Core ML

應(yīng)用模型進(jìn)行預(yù)測

創(chuàng)建文本分類模型

創(chuàng)建文本分類ML模型,可以使用MLDataTable和MLTextClassifier類。步驟如下:

1、創(chuàng)建一個MLDataTable對象,讀取訓(xùn)練數(shù)據(jù)(可以是JSON或CSV格式、或者Dictionary)

2、創(chuàng)建一個MLTextClassifier對象,使用MLDataTable對象中的數(shù)據(jù)進(jìn)行訓(xùn)練

3、通過MLTextClassifier對象的write(to:metadata:)方法,將模型保存到磁盤

csv文件格式示例:

title,author,pageCount,genre

Alice in Wonderland,Lewis Carroll,124,Fantasy

Hamlet,William Shakespeare,98,Drama

Treasure Island,Robert L. Stevenson,280,Adventure

Peter Pan,J. M. Barrie,94,Fantasy

JSON文件格式示例:

[

{

"title": "Alice in Wonderland",

"author": "Lewis Carroll",

"pageCount": 124,

"genre": "Fantasy"

},

{

"title": "Hamlet",

"author": "William Shakespeare",

"pageCount": 98,

"genre": "Drama"

}, ...

]

//Dictionary數(shù)據(jù)示例

let data: [String: MLDataValueConvertible] = [

??? "title": ["Alice in Wonderland", "Hamlet", "Treasure Island", "Peter Pan"],

??? "author": ["Lewis Carroll", "William Shakespeare", "Robert L. Stevenson", "J. M. Barrie"],

??? "pageCount": [124, 98, 280, 94],

??? "genre": ["Fantasy", "Drama", "Adventure", "Fantasy"]

]

let bookTable = try MLDataTable(dictionary: data)

示例代碼

在XCode創(chuàng)建一個空的playground工程,在資源中添加訓(xùn)練使用的數(shù)據(jù)spam-sms.csv,然后將下面的代碼粘貼到工程中

import Foundation

import CreateML

//獲取csv文件路徑

guard let trainingCSV = Bundle.main.url(forResource: "spam-sms", withExtension: "csv") else {

? ? fatalError()

}

//將csv文件內(nèi)容加載到MLDataTable中

var spamData = try MLDataTable(contentsOf: trainingCSV)

let (trainingData, testData) = spamData.randomSplit(by: 0.8, seed: 0)

//創(chuàng)建文本分類器,進(jìn)行訓(xùn)練

//message和label分別對應(yīng)csv文件中的短信內(nèi)容列、短信標(biāo)簽列

let predictor = try MLTextClassifier(trainingData: trainingData, textColumn: "message", labelColumn: "label")

//在測試數(shù)據(jù)集上驗證

let metrics = predictor.evaluation(on: testData)

工程示例:創(chuàng)建文本分類ML模型

說明:

使用400條中文短信內(nèi)容的csv,訓(xùn)練模型時,內(nèi)存占用十分嚴(yán)重,超過Mac系統(tǒng)的物理內(nèi)存,訓(xùn)練卡在解析短信的步驟,未能訓(xùn)練出模型。

使用英文短信內(nèi)容進(jìn)行訓(xùn)練時,沒有內(nèi)存問題,可以訓(xùn)練出模型。

其它

MLClassifier是一個通用的分類模型,MLRegressor是一個回歸模型,給定訓(xùn)練模型(MLDataTable)中的特征列和結(jié)果列后,就可以對這兩種模型進(jìn)行訓(xùn)練。

缺點

模型訓(xùn)練好后,如果增加了數(shù)據(jù)集,必須重新開始訓(xùn)練,即無法在訓(xùn)練好的模型上應(yīng)用新的數(shù)據(jù)進(jìn)行訓(xùn)練。

模型優(yōu)化

提高訓(xùn)練數(shù)據(jù)集上的準(zhǔn)確率(Training Accuracy)

對于MLImageClassifierBuilder,可以將訓(xùn)練的迭代次數(shù)調(diào)整成20次

對于自然語言的分類器,可以嘗試不同的算法(MLTextClassifier.ModelAlgorithmType)

對于MLClassifier和MLRegressor,則可以嘗試選用不同的模型進(jìn)行訓(xùn)練

提高驗證數(shù)據(jù)集上的準(zhǔn)確率(Validation Accuracy)

對于擬合不足的問題,可以通過增加訓(xùn)練數(shù)據(jù)集來進(jìn)行優(yōu)化。例如,對于圖像分類器,可以在訓(xùn)練時勾選Augmentation(增加)選項:

Augmentation選項

對于過擬合的問題,則可以嘗試減少迭代次數(shù)進(jìn)行優(yōu)化。

提高測試數(shù)據(jù)集上的準(zhǔn)確率(Evaluation Accuracy)

如果訓(xùn)練數(shù)據(jù)集、驗證數(shù)據(jù)集上的準(zhǔn)確率,高于測試數(shù)據(jù)集上的準(zhǔn)確率,原因通常是訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)存在比較明顯的差異導(dǎo)致,這種情況下,可以嘗試在訓(xùn)練數(shù)據(jù)集中使用更多的不同的數(shù)據(jù)。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容