对于keras中GlobalAveragePooling2D的理解

当使用Tensorflow做后端的时候,GlobalAveragePooling2D中的运算是K.mean(input, axis=[1, 2])。

对此,可以用np.mean(input, axis=(1, 2))来模拟这个过程。

首先,

x = np.array([[[0, 1, 2],
               [3, 4, 5]],
              [[0, 1, 2],
               [3, 4, 5]]])
print('x: ', x)
print('x.shape: ', x.shape)
new_xx = np.mean(x, axis=(0, 1))
print('new_x: ', new_xx)
print('new_x.shape: ', new_xx.shape)
new_x = np.mean(x, axis=0)
print('new_x_1: ', new_x)
print('new_x_1.shape: ', new_x.shape)
new_x = np.mean(new_x, axis=0)
print('new_x_2: ', new_x)
print('new_x_2.shape: ', new_x.shape)

输出:

x:  [[[0 1 2]
        [3 4 5]]

       [[0 1 2]
         [3 4 5]]]
x.shape:  (2, 2, 3)
new_xx:  [1.5 2.5 3.5]
new_xx.shape:  (3,)
new_x_1:  [[0. 1. 2.]
                    [3. 4. 5.]]
new_x_1.shape:  (2, 3)
new_x_2:  [1.5 2.5 3.5]
new_x_2.shape:  (3,)

可以看到,new_xx是经过处理完的结果,是和下面两部分开处理的是一样的。

       也就是说,首先是实现了两个小矩阵的取平均,由(2, 2, 3)→(2, 3),然后对第一个轴取平均,由(2, 3)→(3,)。这个过程和keras里面的GlobalAveragePooling2D的过程是一样的,这么理解,GlobalAveragePooling2D确实将大量的参数运算简化了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值