TensorFlow 最大池化


由 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,也就是不跳過任何一個顏色通道;

 

一般情況下,需要可能需要更改的就是中間的兩個變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM