
由 Aphex34 (自己的作品) CC BY-SA 4.0, 通過 Wikimedia Commons 共享
這是一個最大池化的例子max pooling 用了 2x2 的濾波器 stride 為 2。四個 2x2 的顏色代表濾波器移動每個步長所產出的最大值。
例如 [[1, 0], [4, 6]]
生成 6
,因為 6
是這4個數字中最大的。同理 [[2, 3], [6, 8]]
生成 8
。 理論上,最大池化操作的好處是減小輸入大小,使得神經網絡能夠專注於最重要的元素。最大池化只取覆蓋區域中的最大值,其它的值都丟棄。
TensorFlow 提供了 tf.nn.max_pool()
函數,用於對卷積層實現 最大池化 。
1 conv_layer = tf.nn.conv2d(input, weight, strides=[1, 2, 2, 1], padding='SAME') 2 conv_layer = tf.nn.bias_add(conv_layer, bias) 3 conv_layer = tf.nn.relu(conv_layer) 4 # Apply Max Pooling 5 conv_layer = tf.nn.max_pool( 6 conv_layer, 7 ksize=[1, 2, 2, 1], 8 strides=[1, 2, 2, 1], 9 padding='SAME')
tf.nn.max_pool()
函數實現最大池化時, ksize
參數是濾波器大小,strides
參數是步長。2x2 的濾波器配合 2x2 的步長是常用設定。
ksize
和 strides
參數也被構建為四個元素的列表,每個元素對應 input tensor 的一個維度 ([batch, height, width, channels]
),對 ksize
和 strides
來說,batch 和 channel 通常都設置成 1
。
strides
[1, 2, 2, 1]
參數:
- strides[0] = 1,也即在 batch 維度上的移動為 1,也就是不跳過任何一個樣本,否則當初也不該把它們作為輸入(input)
- strides[1] = 2,水平移動的步長
- strides[2] = 2,垂直移動的步長
- strides[3] = 1,也即在 channels 維度上的移動為 1,也就是不跳過任何一個顏色通道;
一般情況下,需要可能需要更改的就是中間的兩個變量。