Convolutional Neural Networks(CNN) #2 池化層(Pooling layer)
池化層在卷積神經網路(Convolutional Neural Networks)扮演的角色也很關鍵,它可以幫助我們縮小Feature map的大小(也就是降維),也可以用來強CNN萃取出來的特徵。本篇文章就是要介紹池化層(Pooling layer)的運算規則。
池化層的概念很簡單,但它仍有許多需要注意的屬性,像是與卷積層會用到的『移動步伐Stride』在池化層也會派上用場。
本篇內容中卷積神經網路的功能,同步存放於Github:https://github.com/PoLun-Wang/DL_practice_convolutional_neural_networks
這個部分我也使用較為易懂的2D convolution作為例子來說明池化層的運算規則,如下圖(1),參數設定為輸入Feature map$=(6\times6)$、卷積核Kernel$=(3\times3)$(綠色方框)、Stride$=1$。
紅色方框就是滑動視窗,用來從輸入Feature map中框選欲進行Pooling運算的矩陣,其中滑動視窗的大小必須與Kernel大小一致。
下圖(1)的例子是進行Max pooling運算,計算規則也非常簡單,就是從滑動視窗框選到的矩陣中挑出最大值作為計算結果。
除此之外,池化層一般來說幾乎不會用到Padding,而且池化層另一個特色就是不會產生需要訓練的參數。
圖(1):Max pooling 1
池化層的計算過程跟卷積層是一樣的,都是透過滑動視窗框選局部的數值進行運算。
圖(2):Max pooling 2
除了Max pooling之外,還有另一種是Mean pooling,也就是Average pooling,做法也很簡單,就是將滑動視窗框選到的矩陣值加總,然後計算平均即可,如下圖(3)。
圖(3):Max pooling / Mean pooling 比較
請問圖三是不是失效了呢?
完全不知為啥Cloudflare不給顯示這張圖,不過我已經在重新上傳一張囉,應該是沒有問題了。謝謝您的留言。:)
Pingback:Convolutional Neural Networks(CNN) #6 Pooling in Backward pass - BrilliantCode.net