吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】
深度卷積網絡:實例探究
實例探究(Case studies)
為什么要進行實例探究(Why look at case studies?)
從中獲得靈感,借鑒一些效果很好的網絡來完成自己的任務。
一、經典網絡(Classic Networks)
1、LeNet-5
Input >> Conv >> Pool >> Conv >> Pool >> FC >> FC >> FC(softmax)
輸入是單通道圖片。隨著網絡加深,圖像的大小在縮小,但通道的數量在增加。大約有60K的參數。
node: 該網絡使用的是 average pool 和sigmoid,是因為提出的時間較早。現在基本上是用 max pool 和 ReLU。
2、AlexNet
論文作者提出的原網絡有另一種類型的層(LRN),類似歸一化的操作,后來被證明并沒有太大的作用,所以就不用了。
比LeNet-5的參數更多,效果也更好。
3、VGG-16
該網絡所用的卷積和最大池化層操作都是一樣的。網絡更深,參數也更多,且圖像尺寸縮小和信道數增加是有規律的。
二、殘差網絡(ResNets)
殘差塊:
增加了一個從a[l]直接到z[l+2]的連接,稱為“short cut”或“skip connection”。
殘差網絡和普通網絡對比:
隨著網絡的加深,可能出現梯度消失和梯度爆炸的問題。所以在沒有殘差塊的普通神經網絡中,訓練的誤差實際上是隨著網絡層數的加深,先減小再增加。但在有殘差的ResNet中,即使網絡再深,訓練誤差也是隨著網絡層數的加深逐漸減小。
殘差網絡的理解:
在普通CNN后加一個殘差塊。如果這兩層沒有學到東西,增加了殘差塊后性能也并不遜色于沒有增加殘差塊簡單的網絡,因為對于殘差塊來學習a[l+2]= g(a[l]) = relu(a[l]) = a[l] 這個恒等函數是很容易的。如果增加的網絡結構能夠學習到一些有用的信息,那么就會提升網絡的性能。
因為a[l+2]=g(z[l+2]+a[l]),所以z[l+2]和a[l]的維度要一樣。因此ResNet在設計中使用了很多相同的卷積。如果在池化層上或者維度不匹配可以添加系數矩陣來修正。
三、1x1卷積核(1x1 Convolutions)
1x1卷積核:
- 在二維上,進行1x1的卷積就是把圖片的每個元素和一個這個1x1卷積核數字相乘。
- 在三維上,與1×1×nC卷積核進行卷積,相當于三維圖像上的1×1×nC的切片,也就是nC個點乘以卷積數值權重,通過Relu函數后,輸出對應的結果。其實可以看作是對一個nC切片和一個神經元的全連接神經網絡。而不同的卷積核則相當于不同的隱層神經元。
作用:
在不改變圖像尺寸的同時改變通道數。
四、Inception 網絡(Inception Network)
Inception 網絡的作用(Motivation for inception network):
- 使用Inception Network 我們無需去考慮在構建深度卷積神經網絡時,到底該用多大的卷積核及是否添加池化層。在每一個Inception block中包含了1x1、3x3、5x5的卷積核和 same padding的MAX-POOL,讓模型自己學習需要用哪個。
計算成本:
- 下面是不加和加1x1卷積層的計算成本(只所需乘法運算的次數,因為加法計算成本比較低)。可以看出加了1x1卷積層可以很大程度的減小計算成本,而且如果選擇得當的話,對模型的效果不會產生很大的影響。
完整的Inception 模塊:
Inception Network:
- 重復Inception 模塊,中間適當添加的pool層,構成了Inception Network,也稱為GoogLeNet。其中有多個softmax層,用來檢查是不是過擬合了。
- Inception 名稱即盜夢空間的電影名,意為 we need to go deeper 即我們希望搭建更深的網絡。
使用CNN的實用建議(Practical advices for using ConvNets)
五、使用開源的實現方案(Using Open-Source Implementation)
當在論文中發現感興趣的模型,與其從零開始搭建,不如看看其有沒有開源的實現。如果有可以從網上下載,然后進行修改和應用。
最出名的開源社區:GitHub
六、遷移學習(Transfer Learning)
開發應用的時候,我們通常只有少量的數據集,對于從頭開始訓練一個深層網絡結構是遠遠不夠的。但是我們可以應用遷移學習,應用其他研究者建立的模型和預訓練的權重,來初始化我們的模型。可以根據我們擁有的數據量大小來決定要凍結(freeze)多少層,即在我們的模型中不再訓練這幾層的權重。然后用我們的數據只訓練最后的某幾層,也可以修改最后這幾層的網絡結構。
- 小數據集:除了softmax層其它層全部凍結。把softmax層修改成自己想要的。
- 中數據集:根據情況不凍結后面的幾層,可以根據需要修改這幾層的網絡結構。
- 大數據集:把預訓練的權重當做初始化權重,訓練所有權重。
加速訓練的方法:把凍結的那幾層看成一個固定函數,讓我們的數據集先計算這個固定函數的結果,然后存起來。訓練時直接用這個結果作為我們需要訓練的哪幾層網絡的輸入,然后進行訓練,避免重復計算固定函數的結果。
七、數據擴充(Data Augmentation)
目前而言對于計算機視覺,數據量總是不夠的,所以可以用數據擴充的方法來增加我們的數據量。
常用的幾種圖像的變換:
可以通過修改圖像的顏色來增加數據。常用的方法:PCA(主成分分析)。
可以利用CPU/GPU的多線程或多核,使圖像加載、變換和訓練同時進行。
八、計算機視覺的現狀(State of Computer Vision)
現狀:
數據量不夠,需要手工工程。
- 大量數據的時候,簡單的算法和更少的手工工程。
- 少量數據的時候,更多的是手工工程。因為數據量太少,較大的網絡結構或者模型很難從這些少量的數據中獲取足夠的特征。
在比賽中或在一個開源的數據集上取得更好效果的減小技巧
很難在實際的應用中使用,因為需要更多的計算成本。
Ensembling:獨立訓練多個網絡模型,平均結果作為輸出。
Multi-crop at test time:對測試圖片的進行多種變換,然后在分類器中運行,輸出平均結果。
建議:
總結
以上是生活随笔為你收集整理的吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础篇4——数组
- 下一篇: 吴恩达深度学习笔记1-Course1-W