1. 程式人生 > >深度學習—池化、padding的理解

深度學習—池化、padding的理解

height 深度 val 就會 感受 通過 維度 eno 運算

1、池化層的理解

  pooling池化的作用則體現在降采樣:保留顯著特征、降低特征維度,增大kernel的感受野。另外一點值得註意:pooling也可以提供一些旋轉不變性。

  池化層可對提取到的特征信息進行降維,一方面使特征圖變小,簡化網絡計算復雜度並在一定程度上避免過擬合的出現;一方面進行特征壓縮,提取主要特征。
??最大池采樣在計算機視覺中的價值體現在兩個方面:(1)、它減小了來自上層隱藏層的計算復雜度;(2)、這些池化單元具有平移不變性,即使圖像有小的位移,提取到的特征依然會保持不變。由於增強了對位移的魯棒性,這樣可以忽略目標的傾斜、旋轉之類的相對位置的變化,以此提高精度,最大池采樣方法是一個高效的降低數據維度的采樣方法。
??需要註意的是:這裏的pooling操作是特征圖縮小,有可能影響網絡的準確度,因此可以通過增加特征圖的深度來彌補(這裏的深度變為原來的2倍)。

  在CNN網絡中卷積池之後會跟上一個池化層,池化層的作用是提取局部均值與最大值,根據計算出來的值不一樣就分為均值池化層與最大值池化層,一般常見的多為最大值池化層。池化的時候同樣需要提供filter的大小、步長。

  tf.nn.max_pool(value, ksize, strides, padding, name=None)

  參數是四個,和卷積很類似:

  第一個參數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape

  第二個參數ksize:池化窗口的大小,取一個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels

上做池化,所以這兩個維度設為了1

  第三個參數strides:和卷積類似,窗口在每一個維度上滑動的步長,一般也是[1, stride,stride, 1]

  第四個參數padding:和卷積類似,可以取‘VALID‘ 或者‘SAME‘

  返回一個Tensor,類型不變,shape仍然是[batch, height, width, channels]這種形式

  舉例:池化輸出特征圖計算和卷積計算公式相同,區別是池化是求卷積區域中的max,不涉及卷積計算。

  (1)pooling(kernel size 2×2,padding 0,stride 2) 32*32*16->pooling之後(32-2+0)/2 + 1 =16*16

      pool3 = tf.nn.max_pool(layer3,[1,2,2,1],[1,2,2,1],padding=‘SAME‘) // p = (f-1)/2=(2-1)/2=0,,所以padding=‘SAME‘或“VALID”輸出一樣

  (2)pooling(kernel size 3×3,padding 0,stride 1) 32*32*16->pooling之後(32-3+0)/1 + 1 = 30*30

      pool3 = tf.nn.max_pool(layer3,[1,3,3,1],[1,1,1,1])

2、padding的理解

  之前在討論卷積神經網絡的時候,我們是使用filter來做元素乘法運算來完成卷積運算的。目的是為了完成探測垂直邊緣這種特征。但這樣做會帶來兩個問題。

  • 卷積運算後,輸出圖片尺寸縮小;
  • 越是邊緣的像素點,對於輸出的影響越小,因為卷積運算在移動的時候到邊緣就結束了。中間的像素點有可能會參與多次計算,但是邊緣像素點可能只參與一次。所以我們的結果可能會丟失邊緣信息。

  那麽為了解決這個問題,我們引入padding, 什麽是padding呢,就是我們認為的擴充圖片, 在圖片外圍補充一些像素點,把這些像素點初始化為0.

  padding的用途:

  (1)保持邊界信息,如果沒有加padding的話,輸入圖片最邊緣的像素點信息只會被卷積核操作一次,但是圖像中間的像素點會被掃描到很多遍,那麽就會在一定程度上降低邊界信息的參考程度,但是在加入padding之後,在實際處理過程中就會從新的邊界進行操作,就從一定程度上解決了這個問題。

  (2)可以利用padding對輸入尺寸有差異圖片進行補齊,使得輸入圖片尺寸一致。

  (3)卷積神經網絡的卷積層加入Padding,可以使得卷積層的輸入維度和輸出維度一致。

  (4)卷積神經網絡的池化層加入Padding,一般都是保持邊界信息和(1)所述一樣。

  padding模式:SAME和VALID

  SAME:是填充,填充大小, p = (f-1)/2;VALID:是不填充,直接計算輸出。

深度學習—池化、padding的理解