一、卷積神經網絡分爲以下層次:
一般的層次爲:輸入層->卷積層->ReLU激勵層->池化層->全連接層
各層參數的個數:
https://www.cnblogs.com/hejunlin1992/p/7624807.html
1. 數據輸入層---input layer
常用數據處理方式:
圖像裏只用去均值---中心化--加減某值--目的就是把樣本的中心拉回到座標系原點上
1)227x227x3---去均值----像素相加/像素個數得到均值矩陣,每次減去矩陣-------Alexnet的方法!
2)VGG方法!----三個顏色通道均值,分別減去三個均值!
2.卷積計算層--conv layer
每個神經元---->一個filter濾波器-----窗口滑動,即filter對局部數據計算;
深度/depth----圖中圓圈的個數,即神經元個數,每個圓圈代表一個滑動窗口,窗口內每個像素都有一個權重w;
步長/stride-------窗口每次滑動的像素個數;
填充值/zero-padding-----爲了整除,邊緣補0;
計算方法:
y = wx + b;
w即圖中3x3的矩陣;b是指偏置項;
三通道分別求卷積,然後求和,得到輸出的圖像,所以有幾個卷積核就有幾個輸出。
在卷積層中每個神經元連接數據窗的權重是固定的,每個神經元只關注一個特性。神經元就是圖像處理中的濾波器,比如邊緣檢測專用的Sobel濾波器,即卷積層的每個濾波器都會有自己所關注一個圖像特徵,比如垂直邊緣,水平邊緣,顏色,紋理等等,這些所有神經元加起來就好比就是整張圖像的特徵提取器集合。
3.激勵層---Relu layer
actvation function---激活函數去過濾!---f()
用的多的是Relu----如艾路---(The Rectified Linear Unit/修正線性單元),它的特點是收斂快,求梯度簡單,但較脆弱。
Relu---0~正無窮---輸入小於0的壞的部分刪除,只取正的部分;
缺點---全部數據都在小於0部分---概率小!-----leak Relu來修正!小於0部分斜率很小!放一部分進去!
4. 池化層---Pooling layer
夾在連續的卷積層之間---作用是下采樣!-----壓縮數據和參數的量,減小過擬合!
方法是----求均值或者求最大值!----圖像一般用Max pooling!
關於池化層的理解:
1. 特徵不變性,也就是我們在圖像處理中經常提到的特徵的尺度不變性,池化操作就是圖像的resize,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片,這說明這張圖像中仍保留着狗最重要的特徵,我們一看就能判斷圖像中畫的是一隻狗,圖像壓縮時去掉的信息只是一些無關緊要的信息,而留下的信息則是具有尺度不變性的特徵,是最能表達圖像的特徵。
2. 特徵降維,我們知道一幅圖像含有的信息是很大的,特徵也很多,但是有些信息對於我們做圖像任務時沒有太多用途或者有重複,我們可以把這類冗餘信息去除,把最重要的特徵抽取出來,這也是池化操作的一大作用。
3. 在一定程度上防止過擬合,更方便優化。
5.全連接層---FC layer
兩層之間所有神經元權重連接;---一般在CNN的尾部!
M是以上結構的個數 ;N是卷積層個數;
卷積層1後留下學習後的東西---輪廓,顏色等!
卷積層2----?。。。。。。解釋不清楚!
二、CNN的訓練算法
1)Loss函數
2)找到最小化損失函數的W和b-------SGD算法/隨機梯度下降法(求W和b的偏導數-----BP算法--求導的鏈式法則求dW和db)
除了SGD還有---Adam........
三、優缺點
如何理解卷積神經網絡中的權值共享?
就是整張圖片在使用同一個卷積核內的參數,比如一個3*3*1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因爲圖像內位置的不同而改變卷積核內的權係數。
無論圖像的尺寸是多大,都可以選擇固定尺寸的卷積核,LeNet中最大的卷積核只有5*5*1,而在AlexNet中最大的卷積核也不過是11*11*3。而卷積操作保證了每一個像素都有一個權係數,只是這些係數是被整個圖片共享的,着大大減少了卷積核中的參數量。此外卷積操作利用了圖片空間上的局部相關性,這也就是CNN與傳統神經網絡或機器學習的一個最大的不同點,特徵的自動提取。
CNN利器之感受野:
通俗點的解釋是,特徵圖上的一個點對應輸入圖上的區域;
對感受野的理解:
https://blog.csdn.net/qq_36653505/article/details/83473943
結論: 隨着卷積層數的逐漸增加,感受野的範圍在逐漸擴大,也就是說,越靠近後面的輸出,所受到的圖像的像素影響的範圍更加寬闊。卷積神經網絡正是通過這種層層推進的方式,每一個卷基層都能學習到不同的特徵,最後實現相關的識別、分類等功能的。
四、Dropout-隨機失活正則化方法
約束過擬合!----Dropout-----訓練時關掉一部分學習單元!
五、典型的CNN
AlexNet結構
ZFnet只是比上一個調了參數!
六、調優訓練
w參數用別人訓練好的初始化。------fine-tuning就是使用已用於其他目標、預訓練好模型的權重或者部分權重,作爲初始值開始訓練。
那fine-tuning的具體做法是?
• 複用相同層的權重,新定義層取隨機權重初始值
• 調大新定義層的的學習率,調小複用層學習率
參考:
http://www.cnblogs.com/skyfsm/p/6790245.html