首先需要对深度网络中常见的pooling方式,以及全连接层有大致的了解。(此处略过不提。)

paper: Network in Network

fully connected layer 的缺点

在NIN论文中,提到全连接层参数多,容易陷入过拟合,降低了模型的泛化能力。

Global Average Pooling

既然全连接网络可以使feature map的维度减少,进而输入到softmax,但是又会造成过拟合,是不是可以用pooling来代替全连接。

NIN中提到的 GAP 的是将每一个feature map 得到一个分类的score。

答案是肯定的,Network in Network工作使用GAP来取代了最后的全连接层,直接实现了降维,更重要的是极大地减少了网络的参数(CNN网络中占比最大的参数其实后面的全连接层)。Global average pooling的结构如下图所示:

每个讲到全局池化的都会说GAP就是把avg pooling的窗口大小设置成feature map的大小,这虽然是正确的,但这并不是GAP内涵的全部。GAP的意义是对整个网络从结构上做正则化防止过拟合。既要参数少避免全连接带来的过拟合风险,又要能达到全连接一样的转换功能,怎么做呢?直接从feature map的通道上下手,如果我们最终有1000类,那么最后一层卷积输出的feature map就只有1000个channel,然后对这个feature map应用全局池化,输出长度为1000的向量,这就相当于剔除了全连接层黑箱子操作的特征,直接赋予了每个channel实际的类别意义。

实验证明,这种方法是非常有效的,

这样做还有另外一个好处:不用在乎网络输入的图像尺寸。

同时需要注意的是,使用gap也有可能造成收敛变慢。

思考

  1. inception 和Xception的结构其实也可以看作是NIN的一个结构
  2. GAP 是一种减小参数的方式,可以获得全局的信息。

ref:

  1. http://blog.leanote.com/post/sunalbert/Global-average-pooling

global average pooling的更多相关文章

  1. 深度拾遗(06) - 1X1卷积/global average pooling

    什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均. 只不过这个组合系数恰好可以看成是一个11的卷积.这种表示的好处是,完全可以回到模型中其 ...

  2. Global Average Pooling Layers for Object Localization

    For image classification tasks, a common choice for convolutional neural network (CNN) architecture ...

  3. 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?

    Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模型甚至 ...

  4. 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构 ...

  5. Network in Network(2013),1x1卷积与Global Average Pooling

    目录 写在前面 mlpconv layer实现 Global Average Pooling 网络结构 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 <Net ...

  6. Spark UDAF实现举例 -- average pooling

    目录 1.UDAF定义 2.向量平均(average pooling) 2.1 average的并行化 2.2 代码实现 2.3 使用 参考 1.UDAF定义 spark中的UDF(UserDefin ...

  7. Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

    目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...

  8. 论文笔记:Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language Association

    Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language ...

  9. SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)论文理解

    论文地址:https://arxiv.org/pdf/1406.4729.pdf 论文翻译请移步:http://www.dengfanxin.cn/?p=403 一.背景: 传统的CNN要求输入图像尺 ...

  10. fc全连接层的作用、卷积层的作用、pooling层、激活函数的作用

    fc:1.起到分类器的作用.对前层的特征进行一个加权和,(卷积层是将数据输入映射到隐层特征空间)将特征空间通过线性变换映射到样本标记空间(也就是label) 2.1*1卷积等价于fc:跟原featur ...

随机推荐

  1. selenium验证码处理-打码平台操作

    1.进入打码平台(超人,斐斐) 斐斐-------官网: 超人-------官网: 2.选择对应的开发文档,下载对应的demo示例,并把demo的python脚本放到项目包管理地址去 参考: 超人的开 ...

  2. java -- static, 内部类, 权限, 参数传递

    static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象.static修饰的成员被多个对象共享.static修饰的成员属于类,但是会影响每 ...

  3. pandas之窗口函数

    为了能更好地处理数值型数据,Pandas 提供了几种窗口函数,比如移动函数(rolling).扩展函数(expanding)和指数加权函数(ewm).窗口函数应用场景非常多.举一个简单的例子:现在有 ...

  4. [数据库/MySQL]解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5'

    1 场景复现 MySQL: 5.7.24-27 表结构 (两张独立的表) [表 RRR1] CREATE TABLE `RRR1` ( `R1` float NOT NULL COMMENT 'R1' ...

  5. [Java]【异常处理】在项目开发中的通用规范

    这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...

  6. 自己动手从零写桌面操作系统GrapeOS系列教程——4.1 在VirtualBox中安装CentOS

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 之前讲解开发环境时并没有介绍具体的安装过程,有网友反应CentOS的安装配置有问题,尤其是共享文件夹.本讲我们就来补充介绍一下在VirtualB ...

  7. mysql安装my.cnf配置

    进入my.cnf文件//乱码修改 设置编码 character_set_server = utf8mb4 //编码 collation-server = utf8mb4_general_ci //连接 ...

  8. 【总结】浅刷leetcode,对于位运算提高性能的一些总结

    目录 什么是位运算? 位运算技巧 1. 判断奇偶性 2. 交换两个数 3. 判断一个数是否是2的幂次方 4. 取绝对值 5. 计算平均数 结论 位运算技巧是计算机科学中非常重要的一部分,它可以用来解决 ...

  9. [OpenCV-Python] 20 图像金字塔

    文章目录 OpenCV-Python:IV OpenCV中的图像处理 20 图像金字塔 20.1 原理 20.2 使用金字塔进行图像融合 OpenCV-Python:IV OpenCV中的图像处理 2 ...

  10. ai问答:使用 Vue3 组合式API 和 TS 封装 websocket 断线重连

    这是一个使用 Vue3 组合式 API 和 TS 封装 websocket 的例子 这个组件在 setup 中: 创建了一个 WebSocket 连接 定义了 sendMessage 方法发送消息 监 ...