1. 程式人生 > >對CNN中pooling層(池化層)的理解

對CNN中pooling層(池化層)的理解

自己在學習CNN過程中,查詢網上一些資料,對pooling層有了一些理解,記錄下來,也供大家參考:

pooling層(池化層)的輸入一般來源於上一個卷積層,主要有以下幾個作用:

1.保留主要的特徵,同時減少下一層的引數和計算量,防止過擬合

2. 保持某種不變性,包括translation(平移),rotation(旋轉),scale(尺度),常用的有mean-pooling和max-pooling

mean-pooling(平均值)

對一塊小區域取平均值,假設pooling的窗大小是2x2,

1.forward:就是在前面卷積層的輸出的不重疊地進行2x2的取平均值降取樣,就得到mean-pooling的值。舉例:

\\\
2x2區域取平均值

\

不重疊的4個2x2區域分別mean-pooling

2.backward:把一個值分成四等分放到前面2x2的格子區域裡面就好了。舉例:

\\\

四等分(2/4= 1/2) 放到2x2的區域

\

四個值分別Backword

max-pooling(最大值)

即對一小塊區域取最大值,假設pooling的窗大小是2x2,

1.forward:就是在前面卷積層的輸出的不重疊地進行2x2的取最大值降取樣,就得到max-pooling的值。舉例:

\\\

2x2區域取最大值

\

不重疊的4個2x2區域分別max-pooling

2.backward:在max-pooling前向傳播時,只取最大值,其他值無作用.

因此反向傳播時,只關注最大值,所以將殘差傳遞到該最大值的位置,區域內其他2*2-1=3個位置置零

\

四個值分別Backward

Caffe中池化層的配置

池化層的配置資訊如下:

?

1

2

3

4

5

6

7

8

9

10

11

layer {

        name: 'pool1'

        bottom: 'conv1_2'

        

top: 'pool1'

        type: "Pooling"

        pooling_param {

          pool: MAX

          kernel_size: 2

          stride: 2

        }

      }