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