分類卷積神經網路綜合設計指南

2021-08-19 20:07:32 字數 2837 閱讀 5794

前言當用cnn做影象分類時,我們該從何處入手?該使用哪個預訓練網路? 該如何修改它以適應你的需求? 網路應該是20層還是100層? 哪些是最快的? 最準確的? 這些都是在做影象分類任務時確定最佳cnn時所會遇到的問題。

當為影象分類任務選擇乙個cnn時,主要考慮三個指標:準確性,速度和記憶體。 這些指標將取決於所選擇的cnn模型及你對其進行的修改。 不同的網路如vgg,inception和resnets都有自己對這些效能指標。 此外,你可以修改這些模型的網路結構,如去掉一些層,新增一些層,或使用不同的訓練技巧。

這篇文章將為你設計cnn提供技術指南。 在cnn的設計上我們將重點關注精度,速度和記憶體消耗這三個指標。 我們將分析一些典型的cnn分類模型的這些指標,此外我們還將看看對這些基本cnn進行修改將如何影響我們的指標, 最後,您將學習如何為您的特定影象分類任務優化設計cnn!

網路型別

網路型別和三個指標之間有乙個非常明顯衡量關係。 首先,你一定要選擇inception或resnet的設計結構。 它們比vggnet和alexnet更新,只是在速度和準確性之間效果更好(如上圖所示)。 來自斯坦福的賈斯汀詹森為這些cnn中的一些提供了一些很好的對比實驗。

現在在inception和resnet之間,它們實際上是一種速度與準確性之間的折衷。 想要精確度? 使用超深的resnet。 想要速度? 使用inception。

通過更巧妙的卷積操作來減少對記憶體及執行時間的消耗

最近在傳統cnn的設計上提出了一些替代方案,它們可以加速cnn執行時間並減少記憶體消耗,同時不會有太多精確度損失,而且可以很容易地整合到上述cnn網路型別中:

網路深度

這個很簡單; 增加更多層通常會以速度和記憶體為代價提高精度。 然而,需要注意的一點是,這種權衡取決於收益遞減規律,即我們增加的層數越多,每層給我們的精度上的提公升就越加不明顯。

啟用函式

最近有很多關於這個問題的爭論。 然而,乙個很好的經驗法則是從relu開始。 使用relu通常會為您帶來一些很好的結果,而不會像elu,prelu或leakyrelu那樣需要進行繁瑣的調整。 一旦你確定你設計的模型在relu上執行得非常好,那麼你可以嘗試其他啟用函式,並調整他們的引數來嘗試提高一點準確性。

卷積核尺寸

有人可能會認為,使用更大的卷積核心將產生最高的精確度,但會導致更多的速度和記憶體的消耗。 然而,事實並非如此,因為人們發現使用更大的核心會使網路更難具有可區分性。而使用像3x3這樣的更小的核心更為理想。 resnet和vggnet都相當徹底地解釋和證明了這一點。 您還可以使用1x1核心作為瓶頸層來減少對對特徵層進行降維,這些在這兩篇**中也有體現。

擴張卷積

擴張卷積通過增加卷積核權重之間的間隔來使卷積核有更大的感受野。 這允許網路接收域按指數擴充套件,卻不增加引數計數,即不增加記憶體消耗。 事實證明,使用擴張卷積可以通過微小的速度代價來提高網路的準確性。

資料增強

你幾乎總是在做資料增強。使用更多的資料已被證明能持續提高網路的效能以達到極限。通過資料增強,您可以免費獲得更多資料。 資料增強的方法主要取決於你的應用場景。 例如,如果你正在做自動駕駛系統,那麼你可能不需要底向上的樹木,汽車和建築物,因此垂直翻轉影象是沒有意義的。 但是,您肯定會遇到天氣變化以及整個場景發生的一些變化,因此通過照明變化和水平翻轉來增強您的資料是有意義的。 可以具體了解一下這個資料增強庫。

優化方法

當你最終想要訓練你的網路時,有幾種優化演算法可供選擇。很多人都說sgd在準確性方面能有最好的結果,據我的經驗,這是真的。 但是,調整sgd的學習率和引數可能會很困難且乏味的。另一方面,使用adam,adagrad或adadelta這類學習速率自適應演算法的學習速度快速且容易操作,但您可能無法獲得sgd的最佳精確度。

最好的做法就是根據啟用函式的確定遵循相同的策略:首先使用簡單的優化演算法去看看你的設計是否能夠良好的執行,然後使用更複雜的演算法進行調整和優化。我個人建議從adam開始,因為根據我的經驗,adam演算法很容易使用:只需設定乙個不高的學習率,通常預設為0.0001,通常會得到一些非常好的結果! 稍後,您可以從頭開始使用sgd,甚至可以從adam開始,然後再與sgd一起優化。 事實上,這篇**發現在訓練中期將優化演算法由adam轉換到sgd以最簡單的方式實現最佳的準確性! 如下圖所示:

類平衡你可以通過下面幾種操作來解決這個問題:

優化你的遷移學習 

對於大多數應用來說,使用遷移學習而不是從頭開始訓練您的網路是非常適合。但是,您仍然會根據您的資料來選擇保留哪些層,及重新訓練哪些層。您的資料與預先訓練的網路(通常在imagenet上進行培訓)的資料越相似,您應該重新訓練的層數越少,反之亦然。例如,假設你想識別影象中是否包含葡萄,所以你有一堆葡萄和一堆沒有的影象,這些影象與imagenet中的影象非常相似,因此您只需重新訓練最後幾層,也許只是全連線層。然而,讓我們說你想識別乙個外太空影象中是否包含行星。那麼這樣的資料與imagenet的資料有很大的不同,所以你也需要重新訓練一些後來的卷積層。簡而言之,遵循以下規則:

總結現在您擁有了乙份影象分類cnn設計的綜合指南。 我希望你喜歡這篇文章,並且學到了一些新的有用的東西。

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...

網路綜合佈線應用指南

出版社 人民郵電出版社 出版日期 2009年4月 國標編號 isbn 978 7 115 19357 5 條形碼 9787115193575 字數 505千字 印張 20.25 印數 1 5000 頁碼 322 開本 787 1092 版別版次 2009年4月第1版第1次印刷 定價 39元 內容提要...