04.卷积神经网络 W1.卷积神经网络
文章目錄
- 1. 計算機視覺
- 2. 邊緣檢測示例
- 3. 更多邊緣檢測
- 4. Padding
- 5. 卷積步長
- 6. 三維卷積
- 7. 單層卷積網(wǎng)絡(luò)
- 8. 簡單卷積網(wǎng)絡(luò)示例
- 9. 池化層
- 10. 卷積神經(jīng)網(wǎng)絡(luò)示例
- 11. 為什么使用卷積?
- 作業(yè)
參考:
吳恩達視頻課
深度學(xué)習(xí)筆記
1. 計算機視覺
舉例:圖片貓🐱識別,目標(biāo)檢測(無人駕駛),圖像風(fēng)格轉(zhuǎn)換(比如轉(zhuǎn)成素描)等等
面臨的挑戰(zhàn):
- 數(shù)據(jù)的輸入可能會非常大
- 一張1000×1000的圖片,特征向量的維度達到了1000×1000×3(RGB,3通道) = 300萬
- 在第一隱藏層中,你也許會有1000個隱藏單元,使用標(biāo)準(zhǔn)的全連接網(wǎng)絡(luò),這個矩陣的大小將會是1000×300萬,矩陣會有30億個參數(shù)
- 在參數(shù)如此大量的情況下,難以獲得足夠的數(shù)據(jù)來防止神經(jīng)網(wǎng)絡(luò)發(fā)生過擬合,處理30億參數(shù)的神經(jīng)網(wǎng)絡(luò),巨大的內(nèi)存需求也受不了
你希望模型也能處理大圖。為此,你需要進行卷積計算,下節(jié)將用邊緣檢測的例子來說明卷積的含義
2. 邊緣檢測示例
例如 6x6 的單通道灰度圖像,檢測垂直邊緣,構(gòu)造一個矩陣[10?110?110?1]\left[\begin{array}{rrr}1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1\end{array}\right]???111?000??1?1?1???? (過濾器 / 核),進行卷積運算*(convolve)
為什么可以檢測邊緣?
image = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0]]) filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) print(-signal.convolve2d(image, filter_, boundary='fill',mode='valid')) [[ 0 30 30 0][ 0 30 30 0][ 0 30 30 0][ 0 30 30 0]]3. 更多邊緣檢測
可以檢測明暗變化方向
豎直,水平的過濾器
把這9個數(shù)字當(dāng)成參數(shù),通過反向傳播學(xué)習(xí),邊緣捕捉能力會大大增強(可以檢查任意角度)
4. Padding
上面 6x6 的圖片,經(jīng)過一次過濾以后就變成 4x4 的,如果經(jīng)過多層,最后的圖像會變得很小。
假設(shè)原始圖片是 n×nn \times nn×n,過濾器是 f×ff \times ff×f,那么輸出大小是 (n?f+1)×(n?f+1)(n-f+1) \times(n-f+1)(n?f+1)×(n?f+1)
- 缺點1,圖像每做一次卷積,縮小一點,最后變得很小
- 缺點2,在角落或邊緣區(qū)域的像素點在輸出中采用較少,丟失了圖像邊緣位置的許多信息
解決上面的問題:
- 進行卷積操作前,沿圖像邊緣填充 p 層像素,令 (n+2?p)?f+1=n?p=f?12(n+2*p)-f+1 = n \Rightarrow p = \frac{f-1}{2}(n+2?p)?f+1=n?p=2f?1?, 這樣可以保持圖像大小不變
- 還使得邊緣信息發(fā)揮作用較小的缺點被削弱
ppp 填充多少層,怎么選?
- Valid 卷積:p=0p=0p=0
- 和 Same 卷積:p=f?12p = \frac{f-1}{2}p=2f?1?,fff 通常是奇數(shù)(對稱填充,有中心點)
5. 卷積步長
每次過濾器在圖片中移動 s 步長(上面的 s = 1)
輸出尺寸為 (n+2p?fs+1)×(n+2p?fs+1)(\frac{n+2p-f}{s}+1) \times (\frac{n+2p-f}{s}+1)(sn+2p?f?+1)×(sn+2p?f?+1),向下取整
數(shù)學(xué)中的卷積,需要在操作之前對過濾器順時針旋轉(zhuǎn)90度 + 水平翻轉(zhuǎn),深度學(xué)習(xí)里省略了該步驟,但是不影響,簡化了代碼
6. 三維卷積
輸出是一個二維的,每個格子里是對應(yīng)著 27個元素求和
如果希望對不同的通道進行檢測邊緣,對 filter 的相應(yīng)層設(shè)置不同的參數(shù)就可以了
想要多個過濾器怎么辦?(豎直的、水平的,各種角度的)
7. 單層卷積網(wǎng)絡(luò)
參數(shù)的個數(shù)跟圖片大小無關(guān),跟過濾器相關(guān),假如有10個過濾器,上面每個過濾器有 27 個參數(shù),加上 偏置 b,28個再乘以10,共計280個參數(shù)
即使圖片很大,參數(shù)卻很少,這就是卷積神經(jīng)網(wǎng)絡(luò)的一個特征,叫作“避免過擬合”。
8. 簡單卷積網(wǎng)絡(luò)示例
除了 卷積層(convolution),還有 池化層(pooling),全連接層(fully connected)
9. 池化層
除了卷積層,卷積網(wǎng)絡(luò)也經(jīng)常使用池化層來縮減模型的大小,提高計算速度,同時提高所提取特征的魯棒性
Max 運算的實際作用:
- 如果在過濾器中提取到某個特征,那么保留其最大值
- 如果沒有提取到這個特征,可能在右上象限中不存在這個特征,那么其中的最大值也還是很小
池化,它有一組超參數(shù) f,sf, sf,s,但沒有參數(shù)需要學(xué)習(xí),不需要梯度下降更新
最大池化比平均池化更常用
常用的參數(shù)值為 f=2or?3,s=2f=2 \text{ or } 3, s= 2f=2?or?3,s=2
最大池化時,很少用到 padding(p=0p=0p=0)
輸入輸出通道數(shù)一樣
最大池化只是計算神經(jīng)網(wǎng)絡(luò)某一層的靜態(tài)屬性,沒有需要學(xué)習(xí)的參數(shù)
10. 卷積神經(jīng)網(wǎng)絡(luò)示例
盡量不要自己設(shè)置超參數(shù),而是查看文獻中別人采用了哪些超參數(shù),選一個在別人任務(wù)中效果很好的架構(gòu),它也有可能適用于你的應(yīng)用程序
11. 為什么使用卷積?
和只用全連接層相比,卷積層 的兩個主要優(yōu)勢在于參數(shù)共享和稀疏連接
- 全連接層的參數(shù)巨大,卷積層需要的參數(shù)較少
原因:
神經(jīng)網(wǎng)絡(luò)可以通過這兩種機制減少參數(shù),以便我們用更小的訓(xùn)練集來訓(xùn)練它,從而預(yù)防過度擬合
作業(yè)
作業(yè):手動/TensorFlow 實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進步!
總結(jié)
以上是生活随笔為你收集整理的04.卷积神经网络 W1.卷积神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客 牛牛的独特子序列(双指针/二分查找
- 下一篇: LeetCode 1601. 最多可达成