Introducing Create ML

前言


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

CreateML

這個(gè)topic主要介紹了

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

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

機(jī)器學(xué)習(xí)工作流

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

Transfer Learning


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

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

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

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

圖像


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

注意:需要macOS mojave 10.14Beta态坦,Xcode10Beta,并且playground項(xiàng)目最好放在桌面棒拂,多試幾次import CreateML才能出來伞梯。

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

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

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

如下圖。

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

這里我使用了https://github.com/Rubenfer/CreateML里提供的圖片且预,故意使用8張圖片來訓(xùn)練,只有貓和狗兩種類型烙无,19張圖片用來評(píng)估預(yù)測(cè)锋谐,準(zhǔn)確率居然100%,模型文件只有17KB截酷。
然后我將dog文件夾名字改成cat涮拗,cat改成dog,發(fā)現(xiàn)識(shí)別準(zhǔn)確率依然100%,對(duì)于錯(cuò)誤分類的數(shù)據(jù)也能“正確”的預(yù)測(cè)出來三热,當(dāng)然鼓择,你給一張貓狗以外的圖片肯定識(shí)別錯(cuò),因?yàn)榻Y(jié)果枚舉里只有貓狗這兩種就漾。不過transfer learning還是很牛逼了呐能。

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

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

文本


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

文本識(shí)別的流程被極大簡(jiǎn)化了夷野,識(shí)別前的語言預(yù)測(cè)和文本分段都不需要考慮懊蒸。流程和圖片識(shí)別類似,只是將MLImageClassifier換成了MLTextClassifier悯搔,如下圖骑丸。

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

雖然今年NLP支持了中文的詞性識(shí)別和中文機(jī)構(gòu)識(shí)別妒貌,但我在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在刺,可以獲得一個(gè)能夠識(shí)別多種編程語言的模型文件逆害。

識(shí)別準(zhǔn)確率高達(dá)99.64%

表格(TabularData)


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

表格的行是一個(gè)example颖杏,列是一個(gè)feature纯陨,通常選取一個(gè)列作為target來預(yù)測(cè),以example為單位挖掘每個(gè)feature之間的關(guān)系留储。這里把price作為target翼抠,評(píng)估數(shù)據(jù)時(shí)target列的數(shù)據(jù)對(duì)于模型是隱藏的,通過挖掘到的關(guān)系來對(duì)price做一個(gè)inference(預(yù)測(cè))获讳,再和真實(shí)數(shù)據(jù)里的price比較机久,評(píng)估準(zhǔn)確率。

可以方便地篩選想要的example

流程和上面的類似赔嚎。randomSplit可以將你提供的數(shù)據(jù)源隨機(jī)按比例劃分成訓(xùn)練數(shù)據(jù)和評(píng)估數(shù)據(jù)。這里返回的元組,80%的數(shù)據(jù)是用來訓(xùn)練的尤误,20%是用來評(píng)估的侠畔。table數(shù)據(jù)的訓(xùn)練有很多訓(xùn)練器,包括MLBoostedTreeRegressor损晤、MLDecisionTreeRegressor软棺、MLRandomForestRegressor、MLLinearRegressor等尤勋,如果不知道要用哪個(gè)喘落,可以直接用MLRegressor,他會(huì)自動(dòng)選擇一個(gè)最合適的最冰。

TabularData workflow

總結(jié)


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圾另,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雕沉,更是在濱河造成了極大的恐慌集乔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坡椒,死亡現(xiàn)場(chǎng)離奇詭異扰路,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倔叼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門汗唱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丈攒,你說我怎么就攤上這事哩罪∈诎裕” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵际插,是天一觀的道長碘耳。 經(jīng)常有香客問我,道長框弛,這世上最難降的妖魔是什么辛辨? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮瑟枫,結(jié)果婚禮上斗搞,老公的妹妹穿的比我還像新娘。我一直安慰自己慷妙,他們只是感情好僻焚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著景殷,像睡著了一般溅呢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猿挚,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天咐旧,我揣著相機(jī)與錄音,去河邊找鬼绩蜻。 笑死铣墨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的办绝。 我是一名探鬼主播伊约,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孕蝉!你這毒婦竟也來了屡律?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤降淮,失蹤者是張志新(化名)和其女友劉穎超埋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳鳖,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霍殴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了系吩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来庭。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖穿挨,靈堂內(nèi)的尸體忽然破棺而出月弛,到底是詐尸還是另有隱情肴盏,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布尊搬,位于F島的核電站叁鉴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏佛寿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一但壮、第九天 我趴在偏房一處隱蔽的房頂上張望冀泻。 院中可真熱鬧,春花似錦蜡饵、人聲如沸弹渔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肢专。三九已至,卻和暖如春焦辅,著一層夾襖步出監(jiān)牢的瞬間博杖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工筷登, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剃根,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓嚷量,卻偏偏與公主長得像乖仇,于是被迫代替她去往敵國和親饵撑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1苗傅、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評(píng)論 3 119
  • 如果可以,我愿意做一名麥田守望者 只有我——唯一的大人班巩,和孩子們 播種渣慕,等待發(fā)芽,看它長高趣竣,秋天收獲 如果可以摇庙,我...
    嘰咕嘰咕guanguan閱讀 255評(píng)論 0 0
  • 很高興遇見這樣一個(gè)平臺(tái)卫袒,也很欣喜在簡(jiǎn)書的泥土里生根,慢慢學(xué)習(xí)单匣,順便采擷珍珠夕凝,以供自己高山仰止宝穗。 雖然無奈地發(fā)現(xiàn)有很...
    周小臣閱讀 234評(píng)論 0 1
  • 意想不到:這個(gè)電話逮矛,讓毓灃同學(xué)很快做出了決定。告訴我訂了來武漢的票转砖。發(fā)現(xiàn):一旦人心定须鼎。真的就是一念之...
    福娃婧閱讀 137評(píng)論 0 0
  • 莫露提了一箱酸奶來看余生。余生問:“萬一我不在家咋辦府蔗?你扔門口敖亍?”莫露瞇著眼看看余生姓赤,笑笑:“就扔門口啊赡译。再說,...
    土申哥哥閱讀 265評(píng)論 0 1