tf.nn.max_pool()

概述

max pooling是CNN當中的最大值池化操作,其實用法和卷積很類似

說明

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'
  • use_cudnn_on_gpu:bool類型,是否使用cudnn加速,默認為true
  • name:指定該操作的name

返回

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

實例

示例源碼:
假設有這樣一張圖,雙通道
通道1



通道2



用程序去做最大值池化:
import tensorflow as tf

a = tf.constant([[
            [[1., 17.],
             [2., 18.], 
             [3., 19.],
             [4., 20.]],
            [[5., 21.],
             [6., 22.],
             [7., 23.],
             [8., 24.]],
            [[9., 25.],
             [10., 26.],
             [11., 27.],
             [12., 28.]],
            [[13., 29.],
             [14., 30.],
             [15., 31.],
             [16., 32.]]
        ]])
pooling = tf.nn.max_pool(a, [1, 2, 2, 1], [1, 1, 1, 1], padding='VALID')
with tf.Session() as sess:
    print('image: ')
    print(sess.run(a))
    print('\n')
    print('result: ')
    print(sess.run(pooling))

image:
[[[[ 1. 17.]
[ 2. 18.]
[ 3. 19.]
[ 4. 20.]]

[[ 5. 21.]
[ 6. 22.]
[ 7. 23.]
[ 8. 24.]]

[[ 9. 25.]
[ 10. 26.]
[ 11. 27.]
[ 12. 28.]]

[[ 13. 29.]
[ 14. 30.]
[ 15. 31.]
[ 16. 32.]]]]

result:
[[[[ 6. 22.]
[ 7. 23.]
[ 8. 24.]]

[[ 10. 26.]
[ 11. 27.]
[ 12. 28.]]

[[ 14. 30.]
[ 15. 31.]
[ 16. 32.]]]]

通道1

通道2


可以改變步長

pooling = tf.nn.max_pool(a, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')

輸出結果:
result:
[[[[ 6. 22.]
[ 8. 24.]]

[[ 14. 30.]
[ 16. 32.]]]]

通道1

通道2


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容