7、TensorFLow 中的池化函数

一、池化的好处及具体操作

1、使用池化函数的好处

  • 大大降低特征的维数,避免过拟合
  • 可去除一些冗余信息,得到一个低分辨率的特征图
  • 使得模型更关注是否存在某些特征而不是特征的具体位置,可以容忍一些特征微小的位移

2、具体操作

  • 对输入数据体的每一个深度切片进行操作(深度保持不变)
  • 常用尺寸为 2 ∗ 2 2*2 22 3 ∗ 3 3*3 33 的滤波器,步长为 2 2 2

3、常用池化操作

  • 池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。常用的池化操作有最大池化、平均池化和随机池化, 如下图所示。
  • 现在可以使用 stride convolutional layer 来代替池化层实现下采样,进而构建一个只含卷积操作的网络。
    这里写图片描述
    这里写图片描述
  • 使用 Global Average Pooling 来代替全连接层
    • Global Average Pooling 和 Average Pooling(Local) 的差别就在 “Global” 这个字眼上。Global 和 Local 在字面上都是用来形容 pooling 窗口区域的。Local 是取 Feature Map 的一个子区域求平均值,然后滑动;Global 显然就是对整个 Feature Map 求均值了(kernel 的大小设置成和 Feature Map 的相同)
    • 所以,有多少个 Feature Map 就可以输出多少个节点。一般可将输出的结果直接喂给 softmax 层
      这里写图片描述

二、Max Pooling:计算池化区域中元素的最大值

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

输入参数:

  • value: 一般为卷积后的 feature map,形状为[batch, height, width, channels] ,数据类型为 tf.float32

  • ksize: 池化窗口的大小,形状为[1, height, weight, 1],因为我们不想在batch 和 channels 上做池化,所以这两个维度设为了1

  • strides: 窗口在每一个维度上滑动的步长,形状为[1, stride, stride, 1]

  • padding: 'VALID'SAME,和卷积中的 padding 规则相同

输出:

  • 池化降维后的 feature map,数据类型为 tf.float32

三、Average Pooling:计算池化区域中元素的平均值

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

输入参数:

  • 仅有输入 value 的数据类型比最大池化多了点,其它都一样
  • value: 一般为卷积后的 feature map,形状为[batch, height, width, channels] ,数据类型为 float32, float64, qint8, quint8, or qint32

输出:

  • 池化降维后的 feature map,数据类型为和 value 保持一致

四、代码示例

  • 注意 feature map 的提取及数据的视角

这里写图片描述


五、参考资料

1、https://www.tensorflow.org/api_docs/python/tf/nn/max_pool
2、https://cs231n.github.io/convolutional-networks/
3、CNN的近期进展与实用技巧(上)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值