tf.nn.avg_pooling踩坑

tensorflow之平均池化

首先说一下我遇到的情况,刚开始学tensorflow,接触到池化pooling操作,其中有最大池化max_pooling、平均池化avg_pooling,其中平均池化avg_pooling资料上着重写的是用池化filter范围内的输入矩阵元素总和除以非零元素个数。上代码:

import tensorflow as tf  
  
img=tf.constant([  
        [[0.0,4.0],[0.0,4.0],[0.0,4.0],[0.0,4.0]],  
        [[1.0,5.0],[1.0,5.0],[1.0,5.0],[1.0,5.0]],  
        [[0.0,6.0],[0.0,6.0],[0.0,6.0],[0.0,6.0]],  
        [[3.0,7.0],[3.0,7.0], [3.0,7.0],[3.0,7.0]]
    ])  
  
img=tf.reshape(img,[1,4,4,2])
pooling=tf.nn.avg_pool(img,[1,4,4,1],[1,1,1,1],padding='SAME')
with tf.Session() as sess:  
    print("image:")  
    image=sess.run(img)  
    print (image)  
    result=sess.run(pooling)  
    print ("reslut:\n",result)  

按照资料讲的,结果应该是
reslut:
[[[[1. 5. ]
[1. 5. ]
[1. 5. ]
[1. 5. ]]

[[2. 5.5 ]
[2. 5.5 ]
[2. 5.5 ]
[2. 5.5 ]]

[[2. 6. ]
[2. 6. ]
[2. 6. ]
[2. 6. ]]]

[[3. 6.5 ]
[3. 6.5 ]
[3. 6.5 ]
[3. 6.5 ]]]
但是实际上,结果如下:
reslut:
[[[[0.33333334 5. ]
[0.33333334 5. ]
[0.33333334 5. ]
[0.33333334 5. ]]

[[1. 5.5 ]
[1. 5.5 ]
[1. 5.5 ]
[1. 5.5 ]]

[[1.3333334 6. ]
[1.3333334 6. ]
[1.3333334 6. ]
[1.3333334 6. ]]

[[1.5 6.5 ]
[1.5 6.5 ]
[1.5 6.5 ]
[1.5 6.5 ]]]]
通过比较(可怜我用笔一步一步的套进去),发现取平均并不是对filter范围内的非零元素取平均,而是对filter范围内的非补零元素进行取平均,所谓非补零元素是指padding中补的的零元素之外的元素,即输入矩阵未经过补零操作前的元素(当然指的是filter范围内的)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值