如何設計卷積神經網絡CNN?

2021-02-08 深度學習科研平臺

CNN 網絡應該如何設計?

回答1:網絡多一層和少一層, 好像沒什麼區別. 但這樣一層層測試調參未免太狗血了.一種挺好的方法是:
設計一種或幾種block(這block由幾層網絡構成), 然後堆這種block.
這樣看起來舒服多了,參考resnet網絡結構(其實很多優秀網絡都是這樣的設計)至於每層的通道數, VGG有個設定是: 輸出的feature
map大小相同時,卷積核個數也相同輸出的feature map大小減半(被stride=2的卷積或Pooling後),
則卷積核數翻倍.這樣讓每層的時間花銷相同.而通道數的大小如何確定? 基於對應數據集, 參考其他優秀模型的設置. 記得對比網絡參數大小 .

回答2:建議在pre-trained model 基礎之上進行改進。

回答3:我的經驗是,要知道什麼樣的結構對具體任務有作用,最有效的辦法就是去做對比實驗,從而體會不同結構對網絡性能的影響(參數量/計算量/訓練穩定性/最終精度)。例如想找到kernel_size的最優值,只能通過控制變量,對比實驗。

回答4:流程:

找baseline先找一個前人的基礎網絡結構,作為你設計的基礎。可以是resnet,densenet,Alexnet這種非常經典的,且訓練過程已經被大家復現過的。

調訓練超參訓練超參指的是: learning_rate, num_epoch, weight_decay, momentum還有learning_rate的下降方式以及其涉及到的所以超參等等。個人體會是,weight_decay 影響比較大,相對獨立,也調起來也相對容易些,可以先調;learning_rate以及它的下降方法影響也比較大,但是這裡相互關聯的量很多,調起來比較費時費力;還有num_epoch,這個量也比較關鍵,調num_epoch的時候基本都得等到訓練結束看結果,不太好像調其他參數那樣,看情況不好就提前終止。

調結構在當前基礎上找到一組合理的超參之後,就可以把這組超參固定,之後就可以進入到題主所想研究的調整結構了。這裡可以調的東西很多,對於初學者來說,如果想了解網絡中的每一層對結構的作用,其實可以逐層修改網絡的結構。從而體會不同的layer_type和kernel_size等的影響。

再調訓練超參因為其實不同的網絡結構對應的最優訓練超參不是一樣的。這一套流程走下來,就算是對於訓練參數量在在10M以下的模型,CIFAR10分類來說,也需要很多卡很多天啦。所以設計網絡結構還真是一件非常費事費力的事情。

如何設計CNN網絡架構資料匯總

在inception和resnet網絡提出並相對完善以後,網絡結構的設計就不再爆發式出現了,這兩大類網路涵蓋了大部分應用的卷積網絡結構。

!很有用——基於CNN的圖形分類綜合設計指南

對於大多數應用來說,應該使用遷移學習而不是從頭訓練網絡。但是,你需要抉擇保留哪些網絡層,以及重新訓練哪些層。這取決於你的數據是什麼樣的。你的數據與預訓練的網絡(通常在ImageNet上預訓練)的數據越相似,你應該重新訓練的層數越少,反之亦然。例如,你想分類圖片中是否包含葡萄,所以你有一堆有葡萄的和一堆沒有的圖像。這些圖像與ImageNet中的圖像非常相似,因此你只需重新訓練最後幾層,也許就是全連接層。然而,如果你想對拍攝於外太空的圖片,分類是否包含行星,那麼這樣的數據與ImageNet的數據有很大不同,所以你需要重新訓練低層的卷積層。簡而言之,遵循以下規則:

如何設計卷積神經網絡1如何設計卷積神經網絡?

怎樣設計最優的卷積神經網絡內容總結:

1.提升CNN表現的操作:增加圖片解析度,增加網絡寬度,增加網絡深度,增加跳過連接(密集塊或殘差塊)
2.NAS神經架構搜索+隨機連接神經網絡:探索新的網絡架構和神經元連接方式(這個太遠了不需要做)

改進CNN的14個設計模式

1.泛化能力:是很重要的一個模型評價標準。提升泛化能力:使用正則化手段例如dropout。
2.summation ,下採樣,maxout+ELUS,freeze-drop-path,循環學習率,bootstrapping

設計CNN

part one 網絡深度的設計:網絡深度增加作用:非線性表達能力提升。
1.評估深度對模型性能的影響:層數越多線性區間越多,更好地擬合。實驗表明,錯誤率降低。
2.如何選擇網絡深度?根據一些工業界相關工作者的經驗:從5——8層開始試驗。imagenet 比賽中,2^5*7=224。一般不超過10層就能滿足工業界的一些要求。
3.深度實驗:一個複雜數據集vs一個簡單數據集,20分類。一個性能簡單的網絡vs一個高性能網絡。
網絡1:ALLCONV網絡 5-7層conv+1層全連接
網絡2:MobileNet10-16層

圖中看出增加卷積層(從5到7個卷積層)會提升準確率,但是7層再增加就出現了瓶頸。
MobileNet出現差不多的結果,從10層增加到16層時出現瓶頸。
4.網絡深度增加帶來的問題:過擬合,難以優化,PLD,PLS等。解決方案:跳層連接等。

part two 網絡寬度的設計:網絡寬度指的是每層卷積中濾波器filters(卷積核)的數量,例如VGG16網絡第一層的filter數量就是64個,第一個卷積層的網絡寬度就是64 ,第三個就是128,第五個就是256…為什麼會增加卷積核的個數:「隨著網絡的加深,feathermap的長寬尺寸會變小,也就是卷積提取的特徵越具有代表性,所以後面的卷積層數需要增加,所以卷積核的個數也是要增加的,一般是成倍增加(有的會更根據實驗的情況來具體設置)。」
1.網絡寬度下降,性能會下降。更多的通道數可以學到更多的特徵。所以要適當增加模型寬度。加寬比加深更能提升性能。但計算量提升也很快。
2.如何初始化CNN網絡寬度?答:高效率模型第一層寬度為32足夠。(根據經典網絡結構和工作經驗得出的結論)
3.優化:1*1卷積,分組卷積,跨層連接。

part three 提升模型泛化能力:正則化技術——DROPOUT and BN層的設計
1.類似技術:dropconnect,maxout,stochastic pooling
2.訓練開dropout,預測時關閉?:不一定要關,大部分時候關掉可以提升準確率。
3.dropout 相當於增加了噪聲,造成梯度的損失,訓練時間更久才能收斂。要採用更大的學習率和momentum ,加快收斂。

相關焦點

  • CNN卷積神經網絡實例(基於pytorch)
    1.關於卷積神經網絡卷積神經網絡(Convolutional Neural Network,CNN) 是一種具有局部連接、權重共享等特徵的深層前饋神經網絡
  • Matlab編程之——卷積神經網絡CNN代碼解析
    deepLearnToolbox-master是一個深度學習matlab包,裡面含有很多機器學習算法,如卷積神經網絡CNN,深度信念網絡DBN,
  • 教程 | 基於Matlab的卷積神經網絡(CNN)
    原文連結:https://blog.csdn.net/walegahaha/article/details/51603040原文標題:卷積神經網絡
  • 【深度學習】卷積神經網絡-CNN簡單理論介紹
    當然,這裡默認讀者對神經網絡有一定的了解和認識,如果有疑問可留言,本文也不介紹太多關於數學的內容,以便於讀者理解,如有需要後期更新相關數學推導。1 卷積神經網絡簡介通常有:當然也還包括神經網絡常用的激活層,正則化層等。
  • 數據分析之道|CNN卷積神經網絡之文本分類
    卷積神經網絡(Convolutional Neural Networks, CNN)
  • 用於圖像分割的卷積神經網絡:從R-CNN到Mask R-CNN
    選自Athelas作者:Dhruv Parthasarathy機器之心編譯參與:王宇欣、hustcxy、黃小天卷積神經網絡(CNN)的作用遠不止分類那麼簡單!在本文中,我們將看到卷積神經網絡(CNN)如何在圖像實例分割任務中提升其結果。
  • 卷積神經網絡(CNN)綜述
    卷積神經網絡概念2. 卷積神經網絡的特點   2.1 局部區域連接   2.2 權值共享   2.3 降採樣3. 卷積神經網絡的結構   3.1 卷積層   3.2 池化層4. 卷積神經網絡的研究進展1.
  • 卷積神經網絡(CNN)新手指南
    然而最經典的,或者說最流行的神經網絡使用範例是將其用於圖像處理領域。提到圖像處理,本文主要介紹的是如何使用卷積神經網絡來進行圖像分類。以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。生物聯繫首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。
  • CNN卷積神經網絡— LeNet(二)
    一般神經網絡VS卷積神經網絡:相同點:卷積神經網絡也使用一種反向傳播算法(BP)來進行訓練不同點:網絡結構不同。卷積神經網絡的網絡連接具有局部連接、參數共享的特點。局部連接:是相對於普通神經網絡的全連接而言的,是指這一層的某個節點只與上一層的部分節點相連。參數共享:是指一層中多個節點的連接共享相同的一組參數。
  • 卷積神經網絡(CNN)
    1.卷積神經網絡是在CNN也運用前向傳播與反向傳播求解參數卷積神經網絡(Convolutional Neural Networks,CNN)由若干個卷積層和池化層組成的深度神經網絡,它屬於深度神經網絡的一個特例,它用於圖像識別和自然語言處理
  • CNN卷積神經網絡
    CNN卷積神經網絡卷積神經網絡通常包含以下幾種層:卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積單元組成
  • CNN卷積神經網絡層級結構
    在傳統的神經網絡中,比如多層感知機(MLP),其輸入通常是一個特徵向量:需要人工設計特徵,然後將這些特徵計算的值組成特徵向量,在過去幾十年的經驗來看,人工找到的特徵並不是怎麼好用,特徵有時多了(需要PCA降維),特徵有時少了(容易過擬合),有時選擇的特徵根本就不起作用(真正起作用的特徵在浩瀚的未知裡面)。這就是為什麼在過去卷積神經網絡一直被SVM等完虐的原因。
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 改進卷積神經網絡,你需要這14種設計模式
    選自Topbots作者:Mariya Yao機器之心編譯參與:馬亞雄、吳攀深度學習領域近來已經發展出大量的新架構,而如何選擇使用這些新架構提升卷積神經網絡的性能就顯得越發重要了。機器之心之前報導過提交 ICLR 2017 的論文:解析深度卷積神經網絡的14種設計模式也正是關注於此。而本文在描述14種設計模式之餘更加注重於闡述構建和訓練卷積網絡的小技巧。
  • 卷積神經網絡算法的一個實現
    卷積神經網絡CNN是Deep Learning的一個重要算法,在很多應用上表現出卓越的效果,[1]中對比多重算法在文檔字符識別的效果,結論是CNN優於其他所有的算法。CNN在手寫體識別取得最好的效果,[2]將CNN應用在基於人臉的性別識別,效果也非常不錯。前段時間我用BP神經網絡對手機拍照圖片的數字進行識別,效果還算不錯,接近98%,但在漢字識別上表現不佳,於是想試試卷積神經網絡。
  • 卷積神經網絡(CNN)簡易教程
    讓我們先來了解一下我們的大腦是如何識別物體的。我們將學習什麼是CNN, CNN如何利用大腦的啟發進行物體識別,CNN是如何工作的。讓我們來了解一下我們的大腦是如何識別圖像的根據諾貝爾獎獲得者Hubel和Wiesel教授的說法,視覺區域V1由簡單細胞和複雜細胞組成。簡單的單元有助於特徵檢測,而複雜的單元則結合了來自小空間鄰域的多個這樣的局部特徵。
  • 輕鬆學pytorch-構建卷積神經網絡
    大家好,這個是我的pytorch學習筆記第三篇,主要是使用pytorch來構建一個簡單的卷積神經網絡,完成mnist手寫字符識別。涉及到主要知識點是如何使用torch.nn.Module這個基類來實現一個網絡結構定義。這個基類中最重要的是實現自己的forward方法,這個也是自定義網絡結構的實現方法。
  • 一文掌握CNN卷積神經網絡
    因此,這一節筆者正好通過全連接神經網絡的缺點來開展CNN卷積神經網絡(Convolutional Neural Network)的教學。為了講清全連接神經網絡的局限性,筆者還是拿出上一節最簡單的全連接網絡結構圖來講解,如圖4.3所示,相信大家對這個圖也不陌生了。
  • 一文讀懂卷積神經網絡CNN
    卷積神經網絡簡介(Convolutional Neural Networks,簡稱CNN)卷積神經網絡是近年發展起來,並引起廣泛重視的一種高效識別方法。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網絡避免了對圖像的複雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。K.Fukushima在1980年提出的新識別機是卷積神經網絡的第一個實現網絡。隨後,更多的科研工作者對該網絡進行了改進。
  • 9大主題卷積神經網絡(CNN)的PyTorch實現
    上文聚焦於源碼和論文,對於各種卷積神經網絡模型的實現,本文將介紹它們的 PyTorch 實現,非常有用!這份資源已經開源在了 GitHub 上,連結如下:https://github.com/shanglianlm0525/PyTorch-Networks先來個總結介紹,該系列的卷積神經網絡實現包含了 9 大主題,目錄如下:1. 典型網絡2. 輕量級網絡3. 目標檢測網絡4.