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