tf.nn.max_pool()

				版权声明:本文为博主原创文章,转载请注明出处。					https://blog.csdn.net/mao_xiao_feng/article/details/53453926				</div>
							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似

有些地方可以从卷积去参考【TensorFlow】tf.nn.conv2d是怎样实现卷积的? 

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]这种形式


示例源码:

假设有这样一张图,双通道

第一个通道:

第二个通道:

用程序去做最大值池化:


 
 
  1. import tensorflow as tf
  2. a=tf.constant([
  3. [[ 1.0, 2.0, 3.0, 4.0],
  4. [ 5.0, 6.0, 7.0, 8.0],
  5. [ 8.0, 7.0, 6.0, 5.0],
  6. [ 4.0, 3.0, 2.0, 1.0]],
  7. [[ 4.0, 3.0, 2.0, 1.0],
  8. [ 8.0, 7.0, 6.0, 5.0],
  9. [ 1.0, 2.0, 3.0, 4.0],
  10. [ 5.0, 6.0, 7.0, 8.0]]
  11. ])
  12. a=tf.reshape(a,[ 1, 4, 4, 2])
  13. pooling=tf.nn.max_pool(a,[ 1, 2, 2, 1],[ 1, 1, 1, 1],padding= 'VALID')
  14. with tf.Session() as sess:
  15. print( "image:")
  16. image=sess.run(a)
  17. print (image)
  18. print( "reslut:")
  19. result=sess.run(pooling)
  20. print (result)
这里步长为1,窗口大小2×2,输出结果:


 
 
  1. image:
  2. [[[[ 1. 2.]
  3. [ 3. 4.]
  4. [ 5. 6.]
  5. [ 7. 8.]]
  6. [[ 8. 7.]
  7. [ 6. 5.]
  8. [ 4. 3.]
  9. [ 2. 1.]]
  10. [[ 4. 3.]
  11. [ 2. 1.]
  12. [ 8. 7.]
  13. [ 6. 5.]]
  14. [[ 1. 2.]
  15. [ 3. 4.]
  16. [ 5. 6.]
  17. [ 7. 8.]]]]
  18. reslut:
  19. [[[[ 8. 7.]
  20. [ 6. 6.]
  21. [ 7. 8.]]
  22. [[ 8. 7.]
  23. [ 8. 7.]
  24. [ 8. 7.]]
  25. [[ 4. 4.]
  26. [ 8. 7.]
  27. [ 8. 8.]]]]
池化后的图就是:

证明了程序的结果是正确的。


我们还可以改变步长

pooling=tf.nn.max_pool(a,[1,2,2,1],[1,2,2,1],padding='VALID')
 
 
最后的result就变成:


 
 
  1. reslut:
  2. [[[[ 8. 7.]
  3. [ 7. 8.]]
  4. [[ 4. 4.]
  5. [ 8. 8.]]]]


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值