Introducing Create ML

前言


去年加入的CoreML framework大獲成功,相信許多開發(fā)者都已經(jīng)嘗試在自己的app里加入機器學習的功能了,然而從哪里獲取模型的問題一直不太好解決。即使蘋果提供了一個python工具 --- CoreML Tool,可以將caffe等模型轉(zhuǎn)成coreML模型,但支持的文件類型有限(后面支持了大多數(shù)類型),我嘗試過,對于我這種ML領(lǐng)域小白,感覺也不太好用。所以蘋果今年提供了一個全新的庫---createML,他是swift專屬的framework,可以解決獲取CoreML模型的難題。

CreateML

這個topic主要介紹了

  • Transfer Learning(遷移學習)
  • 圖像識別
  • 文本識別
  • 表格數(shù)據(jù)推斷

通過createML和CoreML,可以只用swift一種語言,在mac上解決創(chuàng)建/訓(xùn)練/評估模型-跑模型-部署到端上運行,并且訓(xùn)練、評估模型都是一兩句代碼就可以實現(xiàn)。對于iOS開發(fā)者來說,引入機器學習的成本可以說非常低了,值得關(guān)注。

機器學習工作流

CreateML目前只能訓(xùn)練三種類型的數(shù)據(jù):圖像、文字和表格數(shù)據(jù)。
對應(yīng)目前的識別能力就是圖像、文本識別和根據(jù)表格數(shù)據(jù)推斷等。

Transfer Learning


我準備開始訓(xùn)練數(shù)據(jù),然而難題出現(xiàn)了,我上哪找大量用來訓(xùn)練的數(shù)據(jù)?
得益于transfer learning,僅僅需要少量數(shù)據(jù)就足夠了。由于蘋果本身在端上已經(jīng)內(nèi)置了多個自己的識別模型(應(yīng)該是一些大文件,蘋果訓(xùn)練了多年的數(shù)據(jù),我理解是萬物識別),我們訓(xùn)練的模型是基于蘋果模型的一種增強,具體就是將他的模型最后幾層layer重新根據(jù)我們的數(shù)據(jù)訓(xùn)練。最終做推斷時會結(jié)合蘋果的訓(xùn)練結(jié)果和你提供的數(shù)據(jù)的訓(xùn)練結(jié)果來推斷。

Labeled Fruits是我們提供的數(shù)據(jù),通過createML重新訓(xùn)練蘋果模型的最后幾層,最終輸出一個coreML模型

這樣訓(xùn)練時間大大減少,甚至幾秒鐘就能訓(xùn)練完成。
模型大小也能從100MB級別減少到KB級別。

transfer learning讓模型可以復(fù)用,個人開發(fā)者可以輕松訓(xùn)練出體積小的模型,讓app更加智能。同時體積小的文件方便下發(fā)到端上,甚至內(nèi)置在安裝包里發(fā)布。

圖像


首先要自己將圖像數(shù)據(jù)分類好,準備好用來訓(xùn)練的數(shù)據(jù)和用來評估的數(shù)據(jù)。下圖是一種分類方式,將每種類型的圖片放在一個文件夾里。然后創(chuàng)建一個swift playground

注意:需要macOS mojave 10.14Beta,Xcode10Beta,并且playground項目最好放在桌面,多試幾次import CreateML才能出來。

兩行代碼,run,就出現(xiàn)一個可視化的窗口

png或jpg文件都可以,尺寸沒有要求,把TestImages文件夾和TrainImages文件夾分別拖進來就可以了,當然也可以用純代碼的方式訓(xùn)練,流程是:

指定數(shù)據(jù)源 - 創(chuàng)建模型 - 評估模型 - 保存模型

如下圖。

純代碼訓(xùn)練和評估模型,#!/usr/bin/swift變成可執(zhí)行文件

這里我使用了https://github.com/Rubenfer/CreateML里提供的圖片,故意使用8張圖片來訓(xùn)練,只有貓和狗兩種類型,19張圖片用來評估預(yù)測,準確率居然100%,模型文件只有17KB。
然后我將dog文件夾名字改成cat,cat改成dog,發(fā)現(xiàn)識別準確率依然100%,對于錯誤分類的數(shù)據(jù)也能“正確”的預(yù)測出來,當然,你給一張貓狗以外的圖片肯定識別錯,因為結(jié)果枚舉里只有貓狗這兩種。不過transfer learning還是很牛逼了。

如果對模型滿意,只要將模型文件拖到項目里即可,具體CoreML文件的使用參考去年的https://developer.apple.com/videos/play/wwdc2017/703

建議自己嘗試https://github.com/Rubenfer/CreateML

文本


data source的格式支持以文件夾分類的txt文本、csv文件和json格式的文件。

文本識別的流程被極大簡化了,識別前的語言預(yù)測和文本分段都不需要考慮。流程和圖片識別類似,只是將MLImageClassifier換成了MLTextClassifier,如下圖。

文件夾作為數(shù)據(jù)源的NLP workflow
json文件作為數(shù)據(jù)源,使用MLDataTable

雖然今年NLP支持了中文的詞性識別和中文機構(gòu)識別,但我在testData里加入中文好像導(dǎo)致死循環(huán)了,不太確定中文數(shù)據(jù)能否用在createML里。
關(guān)于NLP的使用,以前是用NSLinguisticTagger,今年有了一整套新的NL開頭的api,參考https://developer.apple.com/videos/play/wwdc2018/713/

建議自己嘗試https://github.com/Flight-School/Programming-Language-Classifier,可以獲得一個能夠識別多種編程語言的模型文件。

識別準確率高達99.64%

表格(TabularData)


createML使用MLDataTable來處理表格數(shù)據(jù),datasource支持csv、json,它是基于Turi的。

表格的行是一個example,列是一個feature,通常選取一個列作為target來預(yù)測,以example為單位挖掘每個feature之間的關(guān)系。這里把price作為target,評估數(shù)據(jù)時target列的數(shù)據(jù)對于模型是隱藏的,通過挖掘到的關(guān)系來對price做一個inference(預(yù)測),再和真實數(shù)據(jù)里的price比較,評估準確率。

可以方便地篩選想要的example

流程和上面的類似。randomSplit可以將你提供的數(shù)據(jù)源隨機按比例劃分成訓(xùn)練數(shù)據(jù)和評估數(shù)據(jù)。這里返回的元組,80%的數(shù)據(jù)是用來訓(xùn)練的,20%是用來評估的。table數(shù)據(jù)的訓(xùn)練有很多訓(xùn)練器,包括MLBoostedTreeRegressor、MLDecisionTreeRegressor、MLRandomForestRegressor、MLLinearRegressor等,如果不知道要用哪個,可以直接用MLRegressor,他會自動選擇一個最合適的。

TabularData workflow

總結(jié)


我的理解:createML訓(xùn)練出來的模型必然是依賴蘋果模型的,其實本質(zhì)是用蘋果的模型來識別,所以離開蘋果的環(huán)境應(yīng)該無法使用。而我們?nèi)粘i_發(fā)中費很大力氣訓(xùn)練出一個可用的模型,是希望它能運行在多平臺的,這樣看來CreateML最終產(chǎn)出的CoreML只支持iOS/macOS,在這點上有很大局限性,所以這可能是蘋果接下來要解決的另一個難題。
能否讓CoreML運行在android等其他平臺,將成為CoreML普及的一個關(guān)鍵,目前來看只有純粹的開發(fā)iOS/macOS平臺的個人開發(fā)者會使用CoreML和CreateML。
雖然如此,我們還是應(yīng)該開始嘗試,畢竟ML的準入門檻已經(jīng)降低了很多,以后ML也必將成為每個app的標配。

最后編輯于
?著作權(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)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,229評論 3 119
  • 如果可以,我愿意做一名麥田守望者 只有我——唯一的大人,和孩子們 播種,等待發(fā)芽,看它長高,秋天收獲 如果可以,我...
    嘰咕嘰咕guanguan閱讀 279評論 0 0
  • 很高興遇見這樣一個平臺,也很欣喜在簡書的泥土里生根,慢慢學習,順便采擷珍珠,以供自己高山仰止。 雖然無奈地發(fā)現(xiàn)有很...
    周小臣閱讀 301評論 0 1
  • 意想不到:這個電話,讓毓灃同學很快做出了決定。告訴我訂了來武漢的票。發(fā)現(xiàn):一旦人心定。真的就是一念之...
    福娃婧閱讀 170評論 0 0
  • 莫露提了一箱酸奶來看余生。余生問:“萬一我不在家咋辦?你扔門口?。俊蹦恫[著眼看看余生,笑笑:“就扔門口啊。再說,...
    土申哥哥閱讀 346評論 0 1

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