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