[譯]Create ML教程:開始入門

本文是對Raywenderlich上的mac/iOS平臺機器學習文章Create ML Tutorial:Getting Started的翻譯.
因爲譯者對機器學習瞭解不夠深刻,翻譯的疏漏再所不免,敬請原諒.html

本文資料下載python

Create ML就是蘋果決心的證實:蘋果決心讓你更簡單在app中使用機器學習模型.在本教程中,你將學習如何用Create ML加速工做流程:經過改進數據來改進模型,而且經過使用Xcode和Swift來下降學習曲線.ios

與此同時,你還會更加熟悉ML工具集和術語.而不須要引入數學! 你不須要知道如何編寫一個編譯器來使用Swift,你也不須要編寫一個新的ML算法來使用分類器.有了Create ML,你就沒有了不開始學習機器學習的理由!git

Apple ML的簡明歷史:github

  • Core ML:在WWDC 2017上宣佈,已經被每一個主流ML平臺支持,可導出已有模型.可是已有模型老是太大,而且/或者,太籠統.
  • Turi Create:在WWDC 2017以後被收購,它能讓你用本身的數據來自定義現有模型.只不過是用...Python :[.
  • IBM Watson Services:在2018年三月宣佈.你能夠自定義IBM Watson的視覺識別模型來識別你本身的數據.只需拖拽你的數據,無需代碼,但你須要使用IBM Cloud,而且Core ML模型是被Watson API包裝過的.
  • Create ML:在WWDC 2018上宣佈.用Xcode和Swift的ML!目前,只包括了七個Turi Create重點工具集中的兩個,再加上一個通用分類器和迴歸量,還有數據表.我認爲,這是一個引導你通向Turi Create宮殿的誘餌,宮殿裏面居住着一條"好狗"而不是邪惡女巫!(Turi Create的logo是一條狗.)

本教程中,你將從一個Create ML小技巧開始:建立一個帶有GUI的圖片分類器,使用的圖片來自Kaggle Cats and Dogs Dataset.而後,你將其和使用一樣數據集的Turi Create示例進行對比.正如你看到的那樣,Turi Create更加手動化,但它也更加靈活,一點也不難以理解!對於基於代碼的示例,你將對比Create ML和Turi Create文本分類器代碼.算法

而後我將會向你展現如何快速建立環境以使用Turi Create.蘋果甚至修改了Xcode的playgrounds,讓它更接近Jupyter Notebook(此前被稱爲 IPython notebook是一個交互式筆記本,支持運行 40 多種編程語言),這樣代碼環境會讓人更加熟悉! 試一下,你將用Turi Create在Jupyter notebook中,給相同數量的貓和狗的數據集建立一個圖片類似度模型.macos

能夠耐心等待並但願蘋果將Turi Create的其他功能轉移到Create ML中,可是你會發現用Create ML作爲墊腳石來直接使用Turi Create並不困難.若是你須要的更多信息,咱們還有教程教你使用 Keras, scikit-learn and Caffe (稍後推出).一旦你熟悉了開發環境,那麼,ML領域有大量的教程,可供你選擇.編程

注意:Swift for TensorFlow呢?Create ML是給Swift用戶的ML工具,而Swift for TensorFlow是給ML用戶的Swift語言——該項目目標是提供一個更好的編程語言,和編譯器.json

開始

要學習本教程,你須要:swift

  • 一臺Mac,運行macOS 10.14 Mojave beta
  • Xcode 10.x beta

點擊文章開頭或結尾處的下載資料按鈕.starter文件夾中包含了:

  • Pets-100, Pets-1000Pets-Testing:這些包含了貓和狗的圖片;你將用這些來訓練和驗證這個貓-狗分類器.
  • ClassifyingImagesWithVisionAndCoreML:蘋果CoreML的示例程序;你將用本身在Create ML中訓練的模型替換其中的MobileNet模型.
  • good-dog.png:一個附加的狗的圖片.
  • turienv.yaml:你將用這個文件來建立一個環境,來運行Turi Create代碼.

Create ML圖片分類器

首先,準備你的數據 —— 你將用來訓練一個圖片分類器模型來識別貓和狗的圖片.當你展現一張圖片,它將返回標籤"Cat"或"Dog".要訓練這個模型,你須要一個Cat文件夾和一個Dog文件夾.理想的狀況下,這兩個文件夾應該有一樣數量的圖片 —— 若是你有30張貓的圖片和200張狗的圖片,那模型將會偏向於將圖片識別爲Dog.不要包含任何同時有多種動物的圖片.

每一個類須要多少張圖片?至少10張,可是更多的圖片會讓模型更加精準.Kaggle Cats and Dogs Dataset中每一個類有12500張圖片,但你並非所有須要!訓練的時間會隨着圖片數量而增加,圖片數量加倍的話,訓練時間大體也會加倍.

爲了訓練一個Create ML圖片分類器,你須要給它一個訓練數據集(training dataset) —— 一個包含了分類文件夾的文件夾.事實上,在starter文件夾中包含兩個我準備好的數據集,Pets-100Pets-1000.

在完成模型訓練後,你將須要一個 測試數據集(testing dataset) 來驗證模型:一個包含Cat和Dog文件夾的文件夾.測試數據集中的圖片應該與訓練數據集中的不一樣,由於你須要驗證的是當模型遇到沒見過的圖片時表現如何.若是你在收集本身的數據,你要將20%的圖片放到測試數據集中,其他放在訓練數據集中.但咱們每一個類有12500張圖片,因此 Pets-Testing包含了900-999張從每一個類中抽取的圖片.

你將從訓練Pets-100模型開始,而後用Pets-Testing測試.而後用Pets-1000訓練,用Pets-Testing測試.

蘋果的特殊技巧

在Xcode 10中,建立一個新的 macOS 版的 playground,而後輸入下面代碼:

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()
複製代碼

顯示輔助編輯區,點擊運行按鈕:

你將建立並展現一個交互式的視圖,來訓練和驗證一個圖片分類器.它神奇地讓你體驗不一樣的數據集 —— 由於最重要的不是誰有最好的算法,而是誰有最好的數據.算法目前已經很好了,你可讓數據科學家研究它以變得更好.可是垃圾數據進去,垃圾模型出來;絕大部分時間,精力,花費在了爲機器學習策劃數據集上.那麼如今,這個GUI圖片分類器幫助你提高數據規劃技巧! 能夠下載Kaggle Cats and Dogs Dataset並建立你本身的數據集.在你看到個人數據集產出後,你可能會想要更加認真從一大堆中挑選圖片.

拖拽Pets-100文件夾到視圖中.訓練進程當即開始了.在一段時間後,一個表格出如今debug區域,顯示Images Processed, Elapsed TimePercent Complete:

這裏發生了什麼?這叫作遷移學習(transfer learning).底層模型 —— VisionFeaturePrint_Screen, 它支承了Vision framework —— 是預先用海量數據集訓練過的,能識別大量不一樣類型圖片.它經過學習從圖片中尋找哪些特徵features,及如何組合這些特徵來分類圖片.因此,你的數據集的訓練時間,實際就是抽取大約1000特徵的時間.這些特徵可能包括了低級的形狀和紋理,以及高級的形狀如耳朵,兩眼距離,口鼻形狀.而後它只花費了不多一部分時間來訓練一個邏輯迴歸(logistic regression) 模型來將你的圖片分紅兩類.這就相似於將一條直線分紅離散的點,只不過是在1000的尺度上,而不是2.可是它仍然很是快:我這邊共了了1m 15s進行特徵抽取,0.177886 seconds進行訓練及應用邏輯迴歸.

遷移學習只能在,你的數據集特徵點很是相似於訓練模型的數據集特徵點時,才能成功運行.一個在ImageNet上預先訓練的模型 —— 通過大量真實照片訓練 —— 可能沒法遷移到鉛筆畫或顯微照片上.

你可能想要再瀏覽兩篇有趣的文章,關於Google Brain/Research中的特徵:

注意:我是在early-2016 MacBook with 1.1GHz CPU上運行的Create ML.你的時間可能會更快,尤爲是當你的Mac是最新款時,或更新的macOS,Xcode版本等
在2017 MacBook Pro with a 2.9GHz i7 CPU, 特徵抽取時間降低到11.27s 訓練只花費了 0.154341 seconds.

訓練&驗證準確率(validation accuracy)

當訓練完成後,視圖上顯示TrainingValidation準確率指標,及debug區域的詳情.

我獲得了100%訓練及驗證準確率!但你的數值可能不一樣,由於 驗證集(validation set) 是從訓練會話中隨機挑選的,因此你的驗證集將會是不一樣的另外10張圖片.沒有辦法知道哪些圖片被選中.

那麼什麼是驗證(validation)?準確率(accuracy)數值是什麼意思? Training accuracy很簡單:訓練涉及到猜想每一個特徵的權重.由於你給圖片的標籤是"Cat"或"Dog",訓練算法可以檢驗它的答案並計算正確的百分比.而後,反饋出正確或錯誤信息給下一次迭代來細化權重. Validation accuracy也相似:在訓練開始前,從數據集中隨機挑選10%放到驗證數據中.像訓練集同樣,特徵被抽取出,答案被計算出來並帶有權重.可是結果不用在直接重計算權重上.他們的目的是爲了防止模型過擬合overfitting —— 過度關注一些不重要的特徵上,如背景色或燈光.若是驗證準確率和訓練準確率很是不一樣,算法會自動調整.因此,驗證圖片的選擇,同時影響了驗證準確率和訓練準確率.Turi Create讓你提供一個固定的驗證數據集,若是你已經給你的測試數據建立了一個相似特徵參數的話.而且你的測試數據集是用戶給app提供的照片的表明.

評估(Evaluation)

真正的問題是:模型如何給沒有訓練過的圖片分類?

視圖提示你拖拽圖片以開始測試:拖拽Pets-Testing文件夾到視圖中.很快,在debug區域展現出評估(Evaluation) 準確率,及其詳情:

97%準確率:confusion matrix說,有兩張貓的圖片被誤分類成狗了,另有四張狗的照片被誤分類成貓了.查看測試圖片,看看哪些被模型混淆了.有一張已經在上面圖中展現了,還有一張以下:
這兩張圖片是至關很差的:一個是模糊且太亮了,另外一個是模糊且缺乏頭部信息.模型是重設了圖片尺寸到299x299,因此切除掉了一部分你關心的物體,他們理想狀況下應該在圖片的中心部分,不能太大也不能過小.

在上圖中,我點擊展現按鈕來查看置信度:這個模型100%相信這是一條狗!可是仔細查看其餘照片會發現,模型對於其餘質量很差的照片依然獲得了正確答案.

改進準確率

這個Pets-100訓練數據集每一個類只有50張照片.Create ML讓嘗試不一樣數據集變得簡單,來看看更多的數據如何改善準確率.

點擊playground的stop按鈕,而後當它變成run時再點擊一次.這樣加載一個新的視圖,準備好接受訓練數據.

拖拽 Pets-1000文件夾到視圖中.抽取1000張圖片的特徵須要的時間會是100張的五到十倍.等待的時候,能夠看看蘋果的一篇有用的總結文章 Improving Your Model’s Accuracy,它給出了改進不一樣準確率指標的具體建議.

改進訓練準確率

  • 增長圖片分類器的最大迭代數(Max iterations).(該選項在Xcode第一個beta版不能用,但beta 2版就可使用了)
  • 爲文本分類器使用不一樣的算法.
  • 爲通用分類器或迴歸量使用不一樣模型.

改進驗證準確率

  • 增長數據量:對於圖片分類器,你能夠給圖片數據增長參數,如翻轉flipping, 旋轉rotating, 斜切shearing或改變曝光exposure等.參見Apple’s illustration of data augmentation:
  • 可能過擬合:減小最大迭代數(Max iterations).你可能沒必要爲此擔心,由於個人訓練只運行了不到10次就達到了滿意效果並停了下來.

改進評估準確率

確保你的訓練數據足夠多樣化,可以匹配你的測試數據,而且這兩個數據集和你的app上用戶上傳的圖片數據足夠相似.

回到playground

訓練1000張圖片獲得100%的訓練準確率,但只有96%的驗證準確率,咱們能夠多運行幾回,有時能獲得99%的驗證準確率.

拖拽 Pets-Testing文件夾到視圖中,來評估(evaluate)這個模型;它在200張測試圖片上獲得了98.5%的準確率!
此次confusion matrix說模型將三個貓的圖片分類爲狗.實際上,只有只有一樣的兩張是以100%置信度被錯誤標記爲狗的.
儘管confusion matrix沒有報出錯誤,但仍然有兩張狗的照片被標識爲貓,只是置信度較低.它們都是模糊不清,對比度低:
也許你想要更加改善模型,那就須要更多數據,要麼使用帶參數的1000張圖片,要麼使用Kaggle中的完整數據集.或者也能夠對你的數據集進行挑選,忽略那些糟糕的圖片.能夠大膽去體驗一下!記住這是很容易作到的,訓練更大的數據集只多花了一點時間.我嘗試過運行了5000張圖片:只花了32分鐘,我獲得了99%的訓練準確率和驗證準確率...

增長最大迭代次數(Max iterations)?

這個示例程序的準確率至關的好 —— 底層模型極可能已經知道了貓和狗.可是,若是你在訓練不一樣的類型,獲得了一個很低的訓練準確率,你可能會試着將最大迭代次數(Max iterations) 設置爲20.

中止並從新開始 playground,而後點擊右上角的展開符號,將10改成20,而後按回車:

點擊展開符號以關閉設置,而後打開檢查一次,確保仍是20.

注意:在Create ML 和 Turi Create中建立都是個問題 —— 你不能不建立就訓練模型.爲了增長迭代的次數,你必須從頭開始並像原來同樣抽取特徵.Create ML GUI並無提供選項以保存特徵.在那些更加手動的框架中,如Keras,能夠構造,編譯,而後調整模型,因此調整操做隻影響了後面的操做.事實上這是有可能的,對應到Turi Create源碼中,拿出抽出圖片特徵點的低級別代碼 —— 這部分不少時候最有用.而後你能夠保存抽出的特徵,並在你想要更多迭代次數時從新加載它們! 但願這些能讓你對Turi Create和Keras更加感興趣!

使用圖片分類器

這裏又是蘋果的特殊技巧.Create ML GUI輸出一個Core ML模型,而後直接拖拽你的模型到舊的Core ML項目中,只要改變代碼中的一個單詞,就能夠運行了!

點擊右上角的展開符號,會看到一個不一樣的設置項.點擊文本,改爲PetsClassifier.更改Where位置爲starter文件夾,而後點擊save:

打開starter文件夾中的ClassifyingImagesWithVisionAndCoreML項目.這是蘋果2017年的項目,我已經把它升級到了Swift 4.2,並修復了照片讀取的問題.這個項目用了MobileNet.mlmodel,大小爲17.1MB:

拖拽PetsClassifier.mlmodel到項目的導航區中.它的大小是17KB:

搜索項目中的MobileNet:

let model代碼段中,將 MobileNet替換爲 PetsClassifier:

let model = try VNCoreMLModel(for: PetsClassifier().model)
複製代碼

構建並運行.點擊相機圖標進入照片選擇器,而後拖拽一些狗和貓的圖片到Photos中:

選擇一張;這個app將認出的結果顯示在下面的label上:

Turi Create圖片分類器

這段代碼來自Turi Create image classifier example,使用了一樣的數據集 —— 完整的25000張圖片的數據集:

import turicreate as tc

# 1. Load images (Note: you can ignore 'Not a JPEG file' errors)
data = tc.image_analysis.load_images('PetImages', with_path=True)

# 2. From the path-name, create a label column
data['label'] = data['path'].apply(lambda path: 'dog' if '/Dog' in path else 'cat')

# Note: If you have more than two classes, extract the folder names like this:
# train_data["label"] = train_data["path"].apply(lambda path: os.path.basename(os.path.split(path)[0]))

# 3. Make a train-test split
train_data, test_data = data.random_split(0.8)

# 4. Create the model
model = tc.image_classifier.create(train_data, target='label')

# 5. Save predictions to an SArray
predictions = model.predict(test_data)

# 6. Evaluate the model and save the results into a dictionary
metrics = model.evaluate(test_data)
print(metrics['accuracy'])

# 7. Save the model for later use in Turi Create
model.save('mymodel.model')

# 8. Export for use in Core ML
model.export_coreml('MyCustomImageClassifier.mlmodel')
複製代碼

這比你在playground中寫的代碼要多不少,可是你很快就會看到它是相似於Create ML文本分類器代碼.

和你在Create ML中所作的相似:

  • 第1步到第4步,對應於建立訓練和測試文件夾,而後拖拽訓練文件夾到視圖中.Turi Create必須從圖片路徑中抽取類的標籤,但第3步隨機分配20%的數據集到test_data,節約了你建立訓練和測試文件夾的工做,而且每次運行代碼時都會獲得一份不一樣的測試數據集.

注意:在第2步中,只抽取兩個類的標籤是一個特例.我已經在代碼中加一個註釋,來展現普通的狀況.首先,os.path.split() 將路徑分離爲兩部分:文件名(如42.jpg),及其餘部分.而後os.path.basename() 是最後一個文件夾的名字,也是類的名字.

  • 第5步和第6步,對應於拖拽測試文件夾到視圖中.Jupyter notebook能夠像Create ML視圖一個輕鬆展現predictions數組.你還能夠過濾數據來找到錯誤的分類,而不用遍歷查看整個測試圖片集.
  • 第7步,保存模型以供使用,你能夠從新加載它並運行在不一樣的測試數據集上.
  • 第8步,輸出Core ML模型.

因此,Turi Create圖片分類是比Create ML更多手動操做,但更多靈活性.turicreate.create()文檔列出了一些可選參數.你能夠指定底層model以匹配Create ML,注意看Core ML模型的尺寸!若是你已經建立了一個真正的測試數據,不想讓模型使用從你的訓練數據中隨機選擇的測試數據,那麼你還能設置固定的validation_set.

在Create ML中圖片分類是一個很是特殊的例子:MLImageClassifierBuilder的GUI界面使們編寫代碼再也不是必須的了.但在下一章節中,你會看到其餘Create ML模型仍是須要不少代碼.

文本分類器

如今來比較一下,Create ML 和 Turi Create 是如何訓練及測試文本分類模型的.Turi Create模型須要將測試文本轉換進bag of words裏 —— 而在Create ML模型中,這步轉換是直接內置在Create ML模型中的,因此直接接收測試文本文件夾就能夠了.

Create ML

下面是 Create ML文本分類器示例:

import CreateML

// 1. Load data from a JSON file
let data = try? MLDataTable(contentsOf: URL(fileURLWithPath: "<#/path/to/read/data.json#>"))

// 2. Make a train-test split
let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)

// 3. Create the model
let sentimentClassifier = try? MLTextClassifier(trainingData: trainingData,
  textColumn: "text", labelColumn: "label")
  
// 4. Training accuracy as a percentage
let trainingAccuracy = (1.0 - sentimentClassifier.trainingMetrics.classificationError) * 100

// 5. Validation accuracy as a percentage
let validationAccuracy = (1.0 - sentimentClassifier.validationMetrics.classificationError) * 100

// 6. Evaluation accuracy as a percentage
let evaluationMetrics = sentimentClassifier.evaluation(on: testingData)
let evaluationAccuracy = (1.0 - evaluationMetrics.classificationError) * 100

// 7. Add metadata
let metadata = MLModelMetadata(author: "John Appleseed",
  shortDescription: "A model trained to classify movie review sentiment", version: "1.0")

// 8. Export for use in Core ML
try? sentimentClassifier.write(to: URL(fileURLWithPath: "<#/path/to/save/SentimentClassifier.mlmodel#>"),
    metadata: metadata)
複製代碼
  • 第1步,加載文本和標籤列到表格中, 其中標籤的值是三種:positive, negativeneutral.在WWDC 2018 Session 703 video中,展現了另外一種方式來加載單獨保存的名稱爲positivenegative文本文件的方法,相似於加載圖片到圖片分類器的方法.但它只適用於Create ML;並不適用於Turi Create.

WWDC 2018 Session 703中的另外一種加載標籤文本數據的方法:

let trainDirectory = URL(fileURLWithPath: 「/Users/createml/Desktop/train」)
let testDirectory = URL(fileURLWithPath: 「/Users/createml/Desktop/test」)
// Create Model
let classifier = try MLTextClassifier(trainingData: .labeledDirectories(at: trainDirectory))
複製代碼

回到文本分類器主代碼中:

  • 第2步,和Turi Create的 random_split() 同樣,隨機分配20%數據到testingData.可選的seed參數是用來設置隨機數生成器的種子的.
  • 第3步,和Turi Create的 sentence_classifier.create() 中作的同樣.
  • 第4-6步,計算訓練,驗證及評估準確率指標.
  • 第7步和第8步輸出帶有元數據的Core ML模型.

Turi Create

這些代碼來自咱們的教程Natural Language Processing on iOS with Turi Create.它用10個詩人的詩集訓練了一個句子分類器,來預測測試文本的做者.

import turicreate as tc

# 1. Load data from a JSON file
data = tc.SFrame.read_json('corpus.json', orient='records')

# 2. Create the model
model = tc.sentence_classifier.create(data, 'author', features=['text'])

# 3. Export for use in Core ML
model.export_coreml('Poets.mlmodel')
複製代碼
  • 第1步,和Create ML同樣,你能夠從JSON或CSV文件中加載數據.
  • 第2步,訓練模型.
  • 第3步,輸出Core ML模型.

在Turi Create教程資料中包含一個iOS的app,你能夠將文本粘貼在textview中來測試模型.這個app使用了一個wordCounts(text:) 函數,做用相似於Turi Create text classification example末尾的bag of words函數.

這個Turi Create文本分類器指望輸入是以字典形式的單詞和單詞數.而Create ML文本分類器直接接收文本輸入,並建立本身的bag of words.

Turi Create圖片類似度

如今請深呼吸 —— 你將深刻Turi Create 冒險了!

Turi Create還有其餘五個任務處理工具集(task-focused toolkits)目前暫未包含在Create ML中:

  • 推薦系統
  • 圖片類似度
  • 物體檢測
  • 風格遷移
  • 活動分類

貓狗的圖片看起來很是有趣,因此你將訓練一個模型來找到類似圖片.

是的,你如今須要寫點Python了.開發環境用Jupyter notebook你會感受很熟悉 —— 它很像是一個Xcode的playground,可是運行在你的瀏覽器中.

最簡單的方式是使用Anaconda —— 它是ML社區建立的,用來整理全部版本的Python和ML庫,並在單獨的環境(environments) 中管理它們.

Anaconda & Notebooks

下載Python 3.6 version of Anaconda for macOS,在你的home directory中安裝它,不要在root目錄:

若是它說沒法安裝,點擊 Install on a specific disk…按鈕,而後點擊返回到Home按鈕 —— 就能夠安裝了:

注意:安裝Anaconda及建立Tuti Create環境會花費幾分鐘時間.當你在等待時,能夠瀏覽下Michael Kennedy在2014年十一月發表的Comparison of Python and Swift Syntax和Jason Brownlee在2016年五月發表的Crash Course in Python for Machine Learning Developers.Brownlee的文章包含了使用數據科學庫NumPy, Matplotlib 和 Pandas的示例.Swift和Python語法的最大不一樣是當你定義閉包,函數和類的時候,用縮進而不是 {...} .

建立Turi Create環境

可使用Anaconda Navigator GUI或者終端(Terminal)命令來建立環境,來運行Turi Create代碼.

GUI:打開Anaconda Navigator,切換到Environments標籤頁面,並導入starter/turienv.yaml —— 點擊文件夾圖標並在Finder中設置文件位置. Anaconda Navigator將會從文件中填充環境名稱:

Terminal:打開 Terminal,輸入如下命令:

conda env create -f <drag starter/turienv.yaml file from Finder>
複製代碼

啓動Jupyter Notebook

turienv環境下,用GUI或Terminal命令來啓動 Jupyter notebook.

首先,在Finder中,建立一個本地文件夾命名notebooks.

若是你用的是最新的Mac,下載解壓Kaggle Cats and Dogs Dataset,而後移動PetImages文件夾到notebooks中,這樣你就能夠輕鬆將其加載到notebook中.

完整的Kaggle數據集包含25000張圖片,在老的Mac上須要花很長時間來處理.也可使用Pets-1000文件來代替,或者建立你本身的數據集.

GUI:若是你使用Anaconda Navigator,切換到Home標籤頁,點擊Applications on上的turienv,而後點擊jupyter Launch:

一個終端窗口會打開,以運行Jupyter服務器,而後一個瀏覽器窗口顯示你的首頁文件夾.切換回你的 notebooks文件夾. Terminal:若是你在使用 Terminal,輸入下列命令以加載 turienv:

source activate turienv
複製代碼

這個命令行提示符(command line prompt)如今帶有 (turienv) 啓動.輸入下面命令來在notebooks文件夾中啓動Jupyter服務器,並顯示瀏覽器窗口:

jupyter notebook <drag notebooks folder from the Finder>
複製代碼

訓練模型

建立一個新的Python 3.6 notebook:

雙擊標題,重命名notebook:

注意:這個示例和蘋果的Image similarity示例同樣,只是用了貓和狗數據集.

在notebook中包含了一個空白單元格.在單元格中輸入下面一行,而後點擊Shift-Enter來運行單元格:

import turicreate as tc
複製代碼

注意:Shift-Enter在Xcode playground中也可使用,若是你只想運行一段代碼的話.

又一個新的單元格出現了.輸入下面內容,而後運行:

reference_data = tc.image_analysis.load_images('./PetImages')
reference_data = reference_data.add_row_number()
reference_data.save('./kaggle-pets.sframe')
複製代碼

如今你正在將圖片加載到表格中,並給表格添加行號,而後保存以供未來使用.忽略JPEG decode failure信息.

注意:當輸入Python代碼時,使用tab鍵來自動補全.

在下一個單元格中,運行下面語句來檢索數據:

reference_data.explore()
複製代碼

一個新窗口打開,顯示id,路徑和圖片列.將光標移動到行上,展現圖片:

接下來,運行下面語句:

model = tc.image_similarity.create(reference_data)
複製代碼

這會花費一段時間 —— 在 [ * ] 中顯示它正在運行.在等待的時候,閱讀一下無監督學習(unsupervised learning) 吧.

注意:若是須要在完成前手動中止單元格,點擊Stop按鈕(在工具條中Run旁邊).能夠從PetImages中刪除圖片,或只加載Pets-1000.我在個人2015款MacBook Pro運行時,出去吃了午餐,90分鐘回來後才運行完成.

無監督學習

提供標籤數據給圖片分類器,能讓它經過檢測本身的預測與標籤的差別,來衡量準確率.這就是監督學習(supervised learning).

然而,有時儘管你提供了一樣的標籤數據集給一個圖片類似訓練器,它也並不使用這些標籤:這個模型使用的是無監督學習(unsupervised learning).基礎模型查看很是大量的圖片,並教會本身,哪些像素組合會構成特徵(features),能夠用來聚類(cluster) "類似"的圖片.因此正如圖片分類器同樣,大部分訓練時間被用來從你的數據集中抽取特徵.而後,它進行"暴力"最近鄰居(nearest neighbors)模型訓練:對於每張圖片,它計算其到其它圖片的距離(distance),並將其它圖片按半徑排序.而後,再一次與抽取出的特徵點比較,這一步會很快.

查詢模型

當模型準備好後,運行下面幾行:

query_results = model.query(reference_data[0:10], k=10)
query_results.head()
複製代碼

這樣,你就將包含10張reference_data圖片的數組傳了進去,計算10張各自的類似度,而後展現query_results的前10行.

假設你想要看第10張的類似圖片.首先,看看它是什麼:

reference_data[9]['image'].show()
複製代碼

因爲圖片的加載順序是不肯定的,因此你的第10張圖片極可能是不同的.重要的是輸出應該像下面同樣.

因此,運行這幾行代碼:

similar_rows = query_results[query_results['query_label'] == 9]['reference_label']
reference_data.filter_by(similar_rows, 'id').explore()
複製代碼

目標圖片實際上就是返回的第一張圖片.其它的圖片則展現那些類似的貓咪,或者只是擺放位置類似的貓咪.

恭喜你! 你如今已經用Python建立了一個圖片類似度模型! 你的Mac也沒有累爆炸.但願,你也會嘗試一下在你本身的數據上運行其它Turi Create示例.

關閉

退出登陸(Log out) jupyter 瀏覽窗口.

在終端(Terminal)窗口中,jupyter服務器正在運行,按Control-C-C來中止服務器.

若是你的命令行提示符(command line prompt)是以 (turienv) 啓動的,輸入下面指令來退出(exit):

source deactivate
複製代碼

若是你真的不想再使用Anaconda了,輸入下面命令:

rm -rf ~/anaconda3
複製代碼

而後如何作?

完整版Turi Create notebook 和 iOS project放在本文資料中的finished文件夾中.在開頭或結尾處能夠下載.

如今你已經學會了在Create ML中用數據集進行實驗,但願你能繼續學習Turi Create.

探索Create ML及其官方文檔,同時也要花點時間瀏覽Turi Create User Guide,即便你不想使用Python.在Turi Create的How it works文檔中,提供了大量的資料,而且無需深奧的數學知識.想要了解更多,參照他們的學術引用連接.

下面,是繼續學習的一些資源:

咱們的教程

本文是咱們系列ML教程中的最新篇.其它還有:

ML社區

我但願你喜歡本Create ML教程,若是你有任何問題或意見,請在下面評論.特別是記得告訴咱們你用Create ML和Turi Create作什麼!

本文資料下載

相關文章
相關標籤/搜索