一 GlobalAveragePooling2D 全局平均池化
GlobalAveragePooling2D降低维度。
GlobalAveragePooling2D就是求四维数据(图片)的每个通道值c的平均,最后结果没有了宽(w)高(h)维度,只剩下batchsize与channel两个维度。从形状上看:[B,H,W,C] → [B,C]。
下面有1张图片,shape为[1,2,2,3],经过GlobalAveragePooling2D得到shape[1,3]。
import tensorflow as tf
x = tf.random.normal((1,2,2,3))
x.shape
#x:
<tf.Tensor: shape=(1, 2, 2, 3), dtype=float32,
numpy=array([[[[ 1.0732665 , -0.316923 , 0.34387082],
[ 0.85719526, 0.383818 , 0.0714375 ]],
[[ 2.07628 , 1.0945694 , 0.6519038 ],
[ 0.00441903, 1.2396817 , 0.10125866]]]], dtype=float32)>
ax = tf.keras.layers.GlobalAveragePooling2D()(x)
ax.shape
#ax:
<tf.Tensor: shape=(1, 3), dtype=float32,
numpy=array([[1.0027902 , 0.60028654, 0.29211769]], dtype=float32)>
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]]])
#x.shape=[2,2,3]
new_xx = np.mean(x, axis=(0, 1))
#new_xx = [2.25, 2.5, 3.5]
#new_xx.shape = [3]
new_x = np.mean(x, axis=0)
#new_x = [[0, 1, 2], [3, 4, 5]]
#new_xx.shape=[2,3]
二 GlobalMaxPooling2D 全局平均池化
GlobalMaxPooling2D降低维度。
GlobalMaxPooling2D就是求四维数据(图片)的每个通道值c的最大值,最后结果没有了宽(w)高(h)维度,只剩下batchsize与channel两个维度。从形状上看:[B,H,W,C] → [B,C]。
Keras: GlobalMaxPooling vs. MaxPooling_devil_son1234的博客-CSDN博客