|
CNN,Mobile-Net,KNN,Random Forest和MLP。 哪種算法最好? 故事一切始于我年輕的表弟,他在自己的世界里迷路,在繪畫本上涂鴉。 我問他在做什么。 他回答說他正在養(yǎng)貓。 看起來根本不像貓。 他要求我和他一起玩游戲,我會認出他在畫什么。 一段時間以來,這很有趣,但是很快,我就感到無聊。 我不想不和他玩耍來傷害他的感情,所以我用自己的計算機視覺和python技巧來制作一個Doodle分類器。 現(xiàn)在的問題是,我將如何實施它? 有數(shù)百種方法可以對Doodle進行分類,而我必須選擇一種最準確的涂鴉,即花費最少的時間進行訓練,占用更少的內存,需要更少的處理能力并且不需要TB的數(shù)據(jù)即可提供有意義的信息 結果。 上網瀏覽后,我發(fā)現(xiàn)了可以以最佳方式完成此任務的前5種算法,但是我訪問的每個網站都講述了一個不同的故事。 有些人說CNN是最好的,而另一些人說移動網絡是最好的。 我想-好吧,讓我們測試一下所有這些。 我在Kaggle競賽中找到了一個包含大量帶有標簽的涂鴉的出色數(shù)據(jù)集,可以免費下載。 圖像分類是一個巨大的話題,因為有很多算法可用于各種應用。 圖像分類是如此之大和千變萬化,以至于每天都在創(chuàng)建新的算法,并且它的新應用也在不斷涌現(xiàn)。 因此,即使它們有數(shù)百種變體,我也很難手動選擇一些算法。 因此,本文將研究哪種算法最適合涂鴉分類。 我還將測試這些算法在其他情況下(例如手寫字符分類,車牌識別等)的可靠性。 涵蓋范圍· 研究中使用的機器學習技術簡介 · 評估指標 · 選擇用于研究的參數(shù)的詳細信息 · 結果 · 局限性和結論 讓我們首先簡要介紹所使用的機器學習算法涂鴉分類的算法有數(shù)千種,在這里我列出了一些我將探索的著名算法- 1)隨機森林我們可以將隨機森林算法用于分類和回歸。 就像決策樹一樣,只是它使用數(shù)百個決策樹得出結論。 決策樹根據(jù)相似的特征將數(shù)據(jù)分為各種類別。 對于每個數(shù)據(jù)點,它檢查是否具有特定功能,大多數(shù)常見數(shù)據(jù)屬于同一類。 在隨機森林算法中,我們采用許多決策樹,并隨機給它們提供較少的特征以供檢查,例如,如果我們有100個特征,則可能給每棵樹10個隨機特征。 一些樹將分配不正確的類,但是許多樹將是正確的! 我們以多數(shù)為準,并創(chuàng)建我們的分類模型。 2)KNNK最近鄰(KNN)既可以用作分類算法,也可以用作回歸算法。 在KNN中,數(shù)據(jù)點分為幾類,以預測新樣本點的分類。 為了實現(xiàn)此任務,它使用距離公式來計算各個數(shù)據(jù)點之間的距離,然后基于該距離,然后為每個類別定義區(qū)域邊界。 任何新的數(shù)據(jù)點都將屬于這些區(qū)域之一,并將被分配給該類。 3)MLP多層感知(MLP)是前饋人工神經網絡的一種形式。 MLP有許多層,但在其隱藏層中只有一個邏輯函數(shù),而在輸出層中只有一個softmax函數(shù)。 該算法以單個大向量作為輸入,并對輸入層和隱藏層執(zhí)行矩陣運算,然后結果通過邏輯函數(shù),其輸出通過另一個隱層。 重復此過程,直到網絡到達輸出層為止,在此使用softmax函數(shù)生成單個輸出。 4)CNN卷積神經網絡(CNN)是最容易實現(xiàn)的深度學習計算機視覺算法之一。首先,它獲取給定尺寸的輸入圖像,并為其創(chuàng)建多個濾鏡/特征檢測器(最初是給定尺寸的隨機生成的矩陣),濾鏡的目的是識別圖像中的某些圖案,然后在濾鏡上移動在矩陣和圖像之間進行圖像和矩陣相乘。該濾鏡在整個圖像中滑動以收集更多特征,然后我們使用激活函數(shù)(主要是整流的線性單位函數(shù))來增加非線性或僅保留重要特征,然后使用max-pooling函數(shù)將給定值中的所有值相加矩陣大?。ɡ?,如果我們選擇4的矩陣,則它將所有4個值相加以創(chuàng)建1個值),從而減小輸出的大小以使其更快。最后一步是展平最終矩陣,該矩陣作為輸入傳遞到基本ANN(人工神經網絡)并獲得類預測。 5)移動網Mobile-Net體系結構使用深度方向可分離卷積,其中包括深度方向卷積和點方向卷積。 深度方向卷積是通道方向Dk * Dk空間卷積,假設我們在圖像中有3個通道(R,G,B),那么我們將具有3 * Dk * Dk空間卷積。 在逐點卷積中,我們的內核大小為1 * 1 * M,其中M是在深度卷積中的通道數(shù),在這種情況下為3。因此,我們有一個大小為1 * 1 * 3的內核。 我們通過3 * Dk * Dk輸出迭代這個內核以獲得Dk * Dk * 1輸出。 我們可以創(chuàng)建N 1 * 1 * 3個內核,每個內核輸出一個Dk * Dk * 1圖像,以獲得形狀為Dk * Dk * N的最終圖像。 最后一步是將深度方向卷積添加到點方向卷積。 這種類型的體系結構減少了訓練時間,因為我們需要調整的參數(shù)較少,而對精度的影響較小。 評估指標> Sample of doodles used for research 以上是用于本研究的Doodle樣本。 我在Kaggle quickdraw數(shù)據(jù)集上訓練了機器學習模型,該數(shù)據(jù)集包含5000萬張不同類型的Doodle圖像。 我將龐大的數(shù)據(jù)集分為兩部分:用于訓練的35000張圖像和用于測試的15000張圖像。 然后,我針對隨機選擇的5種不同類型的Doodle計算每種算法的訓練時間。 在測試集上,我計算了每種算法的平均平均精度,準確性和召回率。 評估指標 訓練時間 平均平均精度 準確性 召回 Shashwat Tiwari 16MCA0068的更多有關評估指標的信息 選擇的參數(shù)的詳細信息1)隨機森林n_estimators —森林中決策樹的數(shù)量。 [10,50,100] max_features-拆分['auto','sqrt']時要考慮的功能 max_depth —樹中的最大級別數(shù)[2,4,6,8,10] n_jobs-并行運行的進程數(shù),通常設置為-1以一次執(zhí)行最大進程。 準則—這是一種計算損失并因此更新模型以使損失越來越小的方法。 ['熵','cross_validation'] 我使用'自動'作為max_feature; 8作為max_depth; -1作為n_jobs,'熵'作為我的標準,因為它們通常會產生最佳效果。 > the Graph to find an optimum number of trees 但是,為了找出最佳的樹數(shù),我使用了GridSearchCV。 它嘗試所有給定的參數(shù)組合并創(chuàng)建一個表以顯示結果。 從圖中可以看出,在80棵樹之后測試分數(shù)沒有顯著增加。 因此,我決定在80棵樹上訓練我的分類器。 2)K最近鄰居(KNN)n_neighbors —要比較的最近數(shù)據(jù)點數(shù)[2,5,8] n_jobs-并行運行的進程數(shù),通常設置為-1以一次執(zhí)行最大進程 我沒有更改此模型的任何默認參數(shù),因為它們會提供最佳結果。 但是,為了找到n_neighbors的最佳數(shù)量,我使用了GridSearchCV,這是我得到的圖形: > The graph to find an optimum number of N-neighbors 根據(jù)該圖,測試分數(shù)在5 n_neighbors之后下降,這意味著5是最佳鄰居數(shù)。 3)多層感知器(MLP)alpha-最常用的學習速率,它告訴網絡調整梯度的速度。 [0.01,0.0001,0.00001] hidden_layer_sizes —它是一個值的元組,由每層的隱藏節(jié)點數(shù)組成。 [(50,50),(100,100,100),(750,750)] 激活—一種功能,可以為圖像中的重要特征提供價值,并刪除不相關的信息。 ['relu','tanh','logistic']。 求解器(也稱為優(yōu)化器),該參數(shù)告訴網絡使用哪種技術來訓練網絡中的權重。 ['sgd','adam']。 batch_size —這是一次要處理的圖像數(shù)。 [200,100,200]。 我將激活選擇為' relu',將求解器選擇為' adam',因為這些參數(shù)可提供最佳結果。 但是,為了選擇隱藏層和alpha的數(shù)量,我使用了GridSearchCV。 > Table to find an optimum number of N-neighbors 從表中可以看出,當alpha為0.001,hidden_layer_sizes為(784,784)時,可獲得最佳結果。 因此,我決定使用那些參數(shù)。 4)卷積神經網絡(CNN)learning_rate-告訴網絡調整梯度的速度。 [0.01,0.0001,0.00001] hidden_layer_sizes —它是一個值的元組,由每層的隱藏節(jié)點數(shù)組成。 [(50,50),(100,100,100),(750,750)] 激活—一種功能,可以為圖像中的重要特征提供價值,并刪除不相關的信息。 ['relu','tanh','logistic']。 求解器(也稱為優(yōu)化器),該參數(shù)告訴網絡使用哪種技術來訓練網絡中的權重。 ['sgd','adam']。 batch_size —這是一次要處理的圖像數(shù)。 [200,100,200] 時期-程序應運行的次數(shù)或應訓練模型的次數(shù)。 [10,20,200] 我將激活函數(shù)選擇為' relu',將求解器選擇為' adam',因為這些參數(shù)通常會產生最佳效果。 在網絡中,我添加了3個卷積層,2個maxpool層,3個輟學層,最后添加了一個softmax激活函數(shù)。 我在這里沒有使用GridSearchCV,因為可以嘗試很多可能的組合,但是結果不會有太大差異。 5)移動網Input_shape-是由圖像尺寸組成的元組。 [(32,32,1),(128,128,3)]。 Alpha-網絡的寬度。 [<1,> 1,1] 激活—一種功能,可以為圖像中的重要特征提供價值,并刪除不相關的信息。 ['relu','tanh','logistic']。 優(yōu)化器—也稱為求解器,此參數(shù)告訴網絡使用哪種技術來訓練網絡中的權重。 ['sgd','adam']。 batch_size —這是一次要處理的圖像數(shù)。 [200,100,200]。 時期-程序應運行的次數(shù)或應訓練模型的次數(shù)。 [10,20,200] classes-要分類的類數(shù)。 [2,4,10] 損失-告訴網絡使用哪種方法來計算損失,即預測值與實際值之差。 ['categorical_crossentropy','RMSE'] 首先,我將28 * 28圖像的大小調整為140 * 140圖像,因為移動網絡最少需要32 * 32圖像,所以我使用的最終input_shape值為(140,140,1),其中1是圖像通道(在 這種情況下,黑色和白色)。 我將alpha設置為1,因為它通常會產生最佳效果。 激活功能被設置為默認值,即' relu'。 我使用了' Adadelta'優(yōu)化器,因為它可以提供最佳效果。 batch_size設置為128以更快地訓練模型。 我已經使用20個紀元來提高準確性。 由于我們有5個類別可以分類,因此將類別設置為5。 結果> Final Results (Fingers crossed) 以上是所使用的所有機器學習技術的性能。 指標包括準確性,召回率,準確性和培訓時間。 令我震驚的是,Mobile Net的訓練時間為46分鐘,因為它被認為是輕巧的模型。 我不確定為什么會這樣,如果您知道為什么,請告訴我。 局限性和結論· 在這項研究中,只使用了28 * 28大小的黑白涂鴉,而在現(xiàn)實世界中,不同的顏色可能會表現(xiàn)出不同的意思或表示不同的事物,并且圖像大小可能會有所不同。 因此,在這些情況下,算法的行為可能會有所不同。 · 在所有討論的算法中,都有許多可以更改和使用的超參數(shù),它們可能會給出不同的結果。 · 訓練這些算法的訓練集僅限于35000張圖像,添加更多圖像可以提高這些算法的性能。 結果表明,移動網絡實現(xiàn)了最高的準確性,準確性和查全率,因此就這三個參數(shù)而言,它是最佳算法。 但是,移動網絡的培訓時間也是最高的。 如果將其與CNN進行比較,我們可以看到CNN花費更少的時間進行訓練,從而提供了相似的準確性,準確性和召回率。 因此,根據(jù)這項研究,我可以得出結論,CNN是最好的算法。 在進行了這項研究之后,我得出結論,像移動網絡和CNN這樣的算法可用于硬文字識別,車牌檢測以及世界各地的銀行。 諸如移動網絡和CNN之類的算法實現(xiàn)了超過97%的準確度,這優(yōu)于95%的平均人類績效。 因此,這些算法可以在現(xiàn)實生活中使用,從而使困難或耗時的過程自動化。 私信譯者獲得本文代碼 (本文翻譯自Shubh Patni的文章《Ultimate Showdown of Machine Learning Algorithms》,參考:https:///ultimate-showdown-of-machine-learning-algorithms-af68fbb90b06) |
|
|
來自: taotao_2016 > 《AI》