圖解CNN系列二:卷積神經網路各層結構
卷積神經網路Convnet用於透過將原始影象透過層轉換為類分數來識別影象。 CNN的靈感來自視覺皮層。 每當我們看到某些東西時,一系列神經元被啟用,每一層都會檢測到一組特徵,如線條,邊緣。 高層次的層將檢測更復雜的特徵,以便識別我們所看到的內容。
深度學習CNN模型進行訓練和測試,每個輸入影象將透過一系列帶有濾波器(Kernals),Pooling,全連線層(FC)的卷積層並透過Softmax函式對具有0和1之間的機率值的物件進行分類。 下圖是CNN處理輸入影象並根據值對物件進行分類的完整流程。
一、輸入層(訓練資料)
輸入圖層或輸入體積是具有以下尺寸的影象:[寬x高x深]。它是畫素值的矩陣。示例:輸入:[32x32x3] =>(寬度= 32,高度= 32,深度= 3)此處的深度表示R,G,B通道。
輸入層應該可以被2整除多次。 常用數字包括32,64,96,224,384和512。
二、卷積層
卷積是從輸入影象中提取特徵的第一層,Conv層的目標是提取輸入資料的特徵。 卷積透過使用小方塊輸入資料學習影象特徵來保持畫素之間的關係。
具有不同濾波器的影象的卷積可以透過應用濾波器來執行諸如邊緣檢測,模糊和銳化的操作。下面的示例顯示了應用不同型別的過濾器(核心)後的各種卷積影象。
三、Stride
Stride是輸入矩陣上的畫素移位數。 當步幅為1時,我們將濾波器移動到1個畫素。 當步幅為2時,我們一次將濾鏡移動到2個畫素,依此類推,下圖顯示卷積將以2的步幅工作。
四、Padding(填充)
有時濾鏡不適合輸入影象。 我們有兩種選擇:
1、用零填充圖片(零填充)以使其適合
2、刪除濾鏡不適合的影象部分。
這稱為有效填充,僅保留影象的有效部分。
五、啟用函式(ReLu)
ReLU代表整流線性單元,用於非線性操作。 輸出是
ƒ(x) = max(0,x).
為什麼ReLU很重要:ReLU的目的是在我們的ConvNet中引入非線性。 因為,現實世界資料希望我們的ConvNet學習是非負線性值。
還可以使用其他非線性函式,例如tanh或sigmoid代替ReLU。 大多數資料科學家使用ReLU,因為ReLU的效能明顯比其他兩個更好。
六、池化層
池化層部分將減少影象太大時的引數數量。 空間池化也稱為子取樣或下采樣,它降低了每個圖片對映的維度,但保留了重要資訊。 空間池化可以是不同型別的:
1、最大池化
2、平均池化
3、總和池化
七、全連線層
我們稱之為FC層,我們將矩陣展平為向量並將其饋入神經網路的全連線層。
在上圖中,特徵對映矩陣將被轉換為向量(x1,x2,x3,。。。)。 透過全連線層,我們將這些功能組合在一起以建立模型。 最後我們透過一個啟用功能,如softmax或sigmoid,將輸出分類為貓,狗,汽車,卡車等,
總結
1、將輸入影象提供到卷積層
2、選擇引數,可透過應用strides、Pooling和濾波器。 對影象執行卷積並將ReLU啟用應用於矩陣。
3、執行池化以減少維度大小
4、新增儘可能多的卷積層直到滿意為止
5、 壓平輸出並饋入全連線層(FC層)
6、使用啟用函式(帶成本函式的Logistic迴歸)輸出類並對影象進行分類。
微信公眾號:python語音識別
更多深度學習演算法的學習歡迎關注我們。對深度學習感興趣的同學歡迎大家轉發&轉載本公眾號文章,讓更多學習深度學習的夥伴加入公眾號《python語音識別》,在實戰中成長。同時歡迎在公眾號內留言;