Keras GlobalAveragePooling2D 空间数据的全局平均池化操作
空间数据的全局平均池化操作。
一张图片通过卷积核提取特征,有几个卷积核就有几个特征。
一张图片需要经过几次卷积,每次卷积时卷积核的个数都按2的n次方增加。
第一次卷积, 卷积核2个, 得2张图,池化压缩长宽;
第二次卷积, 卷积核4个, 得4张图,池化压缩长宽;
因为卷积次数有限,池化大小默认(2,2),因此到最后2的n次方张图的长宽基本不等于1。
所以用GlobleAveragePooling2D将长宽压缩为1,也就是维度变为了(1,1,2的n次方)。
在TF2的框架下,这是用卷积提取特征的最后一步,用语句tf.keras.layers.GlobleAveragePooling2d()来实现。
这样就得到了一维数组,可以输入到全连接层。因为全连接层的第一层输入,只按受一维数组。
https://zhuanlan.zhihu.com/p/463457920
=================================================
GlobalAveragePooling2D带来的维度降低
全局平均池化,深度神经网络中经常使用的一个层,使用前后的尺寸分别为[B,H,W,C]->[B,C].特别要注意,这个层使用之后特征图尺寸的维度变成了2维而非4维。这将对你之后的计算带来影响。
解决方法
在numpy中有expand_dims函数可以实现增加维度的功能,keras中backend模块同样提供了这个函数,使用
K.expand_dims(x,1)
即为在H维度上增加了一维,我们调用该函数两次就可以达到和原来特征图一样的维度了。
链接:https://blog.csdn.net/qq_36763031/article/details/108326170
=================================================
GlobalAveragePooling2D就是将每张图片的每个通道值各自加起来再求平均,最后结果是没有了宽高维度,只剩下个数与平均值两个维度。可以理解为变成了多张单像素图片。
从形状上看:[B,H,W,C] ->GlobalAveragePooling2D -> [B,C]
下面有1张图片,高宽分别是2像素,RGB3个通道。即[1,2,2,3]
经过GlobalAveragePooling2D得到一个单通道单像素图片[1,3].?????
其中RGB各分通道的像素值都加起来之后得到了一个平均值。???
import tensorflow as tf x = tf.random.normal((1,2,2,3)) x.shape # TensorShape([1, 2, 2, 3]) 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 # TensorShape([1, 3]) ax
#
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=array([[1.0027902 , 0.60028654, 0.29211769]], dtype=float32)>
下面是2张,宽高都是2像素,RGB3个通道的图片。经过GlobalAveragePooling2D得到2张单通道单像素图片[2,3]。 每张图片的R通道所有像素值求了一个平均,G通道与B通道的像素值也求了一个平均。
a1 = tf.random.normal((2,2,2,3)) a1.shape # TensorShape([2, 2, 2, 3]) a1
<tf.Tensor: shape=(2, 2, 2, 3), dtype=float32, numpy=
array([[[[-0.76654285, 1.79131 , 1.0236188 ],
[-0.6119361 , -1.5272698 , -0.364413 ]],
[[ 0.07261603, 0.57860726, 0.4255542 ],
[-0.57528603, 0.74275184, 0.07588626]]],
[[[ 0.84789306, 1.2030426 , -1.7836232 ],
[ 0.6010358 , 1.3016247 , -0.7656161 ]],
[[ 0.34526846, 2.0315964 , 0.1813532 ],
[-0.7089366 , 0.6344181 , 0.973302 ]]]], dtype=float32)>
pa1 = tf.keras.layers.GlobalAveragePooling2D()(a1) pa1.shape # TensorShape([2, 3]) pa1
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[-0.47028726, 0.3963498 , 0.29016155],
[ 0.2713152 , 1.2926704 , -0.34864607]], dtype=float32)>
链接:https://blog.csdn.net/weixin_42670810/article/details/120061091
=================================================
例子:
input_shape = (2, 4, 5, 3)
x = tf.random.normal(input_shape)
y = tf.keras.layers.GlobalAveragePooling2D()(x)
print(y.shape)
(2, 3)
输入形状:
- 如果
data_format='channels_last'
:形状为(batch_size, rows, cols, channels)
的 4D 张量。 - 如果
data_format='channels_first'
:形状为(batch_size, channels, rows, cols)
的 4D 张量。
输出形状:
- 如果
keepdims
=False:形状为(batch_size, channels)
的二维张量。 - 如果
keepdims
=真:- 如果
data_format='channels_last'
:形状为(batch_size, 1, 1, channels)
的 4D 张量 - 如果
data_format='channels_first'
:形状为(batch_size, channels, 1, 1)
的 4D 张量
- 如果
http://www.manongjc.com/detail/31-ynmhjenfiarsjrg.html
=================================================
GAP (Global Average Pooling)可用于模型微调,在做图像分类比赛时效果较好.最早在<<Network In Network>>中提出.
在常见的卷积神经网络中,全连接层之前的卷积层负责对图像进行特征提取,在获取特征后,传统的方法是接上全连接层之后再进行激活分类,而GAP的思路是使用GAP来替代该全连接层(即使用池化层的方式来降维),更重要的一点是保留了前面各个卷积层和池化层提取到的空间信息\语义信息,所以在实际应用中效果提升也较为明显!,另外,GAP去除了对输入大小的限制!,而且在卷积可视化Grad-CAM中也有重要的应用.

GAP直接从 feature map 的通道信息下手,比如我们现在的分类有N种,那么最后一层的卷积输出的 feature map 就只有N个通道,然后对这个 feature map 进行全局池化操作,获得长度为N的向量,这就相当于直接赋予了每个通道类别的意义。
GAP层,通过减少模型中的参数总数来最小化过度拟合。 与最大池层类似,GAP层用于减小三维张量的空间维度。 然而,GAP层执行更极端类型的维数减少,其中尺寸为的张量的尺寸减小为具有
的尺寸。 GAP层通过简单地获取所有
值的平均值,将每个
特征映射层减少为单个数字.

- 可以这样使用GAP层,即GAP层之后是一个密集连接的层,其中softmax激活函数产生预测的对象类。
=================================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2009-10-08 An error has occurred during report processing
2007-10-08 asp.net 2.0 中的 Webadmin.axd