当使用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确实将大量的参数运算简化了。