1. 程式人生 > >DL課程:CNN及相關應用案例程式碼

DL課程:CNN及相關應用案例程式碼

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。

前面介紹了MLP、RNN以及相關案例,本文主要介紹一種新的神經網路:CNN卷積神經網路。

CNN卷積神經網路:

卷積神經網路相比RNN多了很多層級,主要包括以下幾個層次:input layer資料輸入層、conv卷積計算層、Activation layer激勵層、pooling layer池化層、FC layer全連線層、Batch Normalization層。

  • 資料輸入層/ Input layer有三種常見資料處理方式:
    去均值:把輸入資料各個維度都中心化到0;

    歸一化:幅度歸一化到同樣的範圍 ;

    PCA/白化
    :用PCA降維、白化是對資料每個特徵軸上的幅度歸一化;

  • 卷積計算層/ CONV layer 作用是:區域性關聯,每個神經元看做一個filter濾波器。視窗(receptive field)滑動,filter對區域性資料計算;涉及概念:深度/depth、步長/stride、填充值/zero-padding

    卷積層引數共享機制的性質:
    ①假設每個神經元連線資料窗的權重是固定的;
    ②固定每個神經元連線權重,可以看做模板,每個神經元只關注一個特性;
    ③需要估算的權重個數減少:一層1億減少至3.5萬;
    ④一組固定的權重和不同視窗內資料做內積即卷積。

  • 激勵層:把卷積層輸出結果做非線性對映,前面介紹DNN時就詳細講過,沒看的可以檢視:
    DL課程:MLP、DNN、Wide&deep model及相關案例程式碼

    激勵層主要有以下幾點注意事項:
    ①CNN慎用sigmoid!
    ②首先試RELU,因為快,但要小心點;
    ③如果2失效,請用Leaky ReLU或者Maxout ;
    ④某些情況下tanh倒是有不錯的結果,但是很少。
  • 池化層 / Pooling layer:夾在連續的卷積層中間,主要作用是壓縮資料和引數的量,減小過擬合:

    主要包括:Max pooling和average pooling:

  • 全連線層 / FC layer :就是普通的所有神經元都有權重連線的層,通常接在卷積神經網路的尾部。
  • 典型的CNN結構
    為:

  • 卷積神經網路優缺點
    優點:①共享卷積核,優化計算量;②無需手動選取特徵,訓練好權重,即得特徵;③深層次的網路抽取影象資訊豐富,表達效果好;
    缺點:①需要調參,需要大樣本量,GPU等硬體依賴;②物理含義不明確
  • 損失函式、優化演算法以及正則化參考與上面一樣。

CNN發展:

  • LeNet,這是最早用於數字識別的CNN :

  • AlexNet,2012 ILSVRC比賽遠超第2名的CNN,比LeNet更深,用多層小卷積層疊加替換單大卷積層:

  • ZF Net,2013 ILSVRC比賽冠軍 :

  • GoogLeNet,2014 ILSVRC比賽冠軍:

  • VGGNet,2014 ILSVRC比賽中的模型,影象識別略差於GoogLeNet,但是在很多影象轉化學習問題(比如object detection)上效果很好 :

  • ResNet,即Deep Residual Learning network,是2015ILSVRC比賽冠軍,結構修正(殘差學習)以適應深層次CNN訓練,比VGG還要深8倍,主要是有一個快速通道與後面的神經元直連,因此可以在BP時計算梯度為相加的形式,不會產生梯度彌散:

具體案例程式碼:歡迎關注我的github


To be continue......