全局平均池化层(GLP)

2024-01-11 10:38
文章标签 全局 平均 池化层 glp

本文主要是介绍全局平均池化层(GLP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、全局平均池化

全局平均池化层(GAP)在2013年的《Network In Network》(NIN)中首次提出,于是便风靡各种卷积神经网络。为什么它这么受欢迎呢?

一般情况下,卷积层用于提取二维数据如图片、视频等的特征,针对于具体任务(分类、回归、图像分割)等,卷积层后续会用到不同类型的网络拿分类问题举例,最简单的方式就是将卷积网络提取出的特征(feature map)输入到softmax全连接层对应不同的类别首先,这里的feature map是二维多通道的数据结构,类似于三个通道(红黄绿)的彩色图片,也就是这里的feature map具有空间上的信息;其次,在GAP被提出之前,常用的方式是将feature map直接拉平成一维向量(下图左),但是GAP不同,是将每个通道的二维图像做平均,最后也就是每个通道对应一个均值(下图右)。

思想:对于输出的每一个通道的特征图的所有像素计算一个平均值,经过全局平均池化之后就得到一个 维度=C_{in}=类别数 的特征向量,然后直接输入到softmax层 

 如果有一批特征图,其尺寸为 [ B, C, H, W], 经过全局平均池化之后,尺寸变为[B, C, 1, 1]
也就是说,全局平均池化其实就是对每一个通道图所有像素值求平均值,然后得到一个新的1 * 1的通道图

可以看到,GAP的设计非常简单直接,但是为什么要这么做呢?或者说GAP区别于全连接的方式有哪些优势呢?

  1. 抑制过拟合。直接拉平做全连接层的方式依然保留了大量的空间信息,假设feature map是32个通道的10*10图像,那么拉平就得到了32*10*10的向量,如果是最后一层是对应两类标签,那么这一层就需要3200*2的权重矩阵,而GAP不同,将空间上的信息直接用均值代替,32个通道GAP之后得到的向量都是32的向量,那么最后一层只需要32*2的权重矩阵。相比之下GAP网络参数会更少,而全连接更容易在大量保留下来的空间信息上面过拟合。
  2. 可解释的雏形。在《NIN》原文当中有这样一句话,GAP相比全连接更加自然地加强了类别和feature map之间的联系,(这个类别指的是分类的类别)因此,feature map可以很容易地解释成categories confidence maps。后半句可能有些难以理解,这块我们在第二节展开来讲。如果之前对Class Activation Mapping (CAM) 有过了解的同学可能会不禁感叹:“这其实就是CAM的核心思想!”
  3. 输入尺寸更加灵活。在第1点的举例里面可以看到feature map经过GAP后的神经网络参数不再与输入图像尺寸的大小有关,也就是输入图像的长宽可以不固定

除了这些优势,GAP也有个缺点——训练的收敛速度会变慢。

参考:【机器学习】一文带你深入全局平均池化 - 知乎

 全局平均池化_你吃过卤汁牛肉吗的博客-CSDN博客_全局平均池化

这篇关于全局平均池化层(GLP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594112

相关文章

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

集群环境下为雪花算法生成全局唯一机器ID策略

雪花算法是生成数据id非常好的一种方式,机器id是雪花算法不可分割的一部分。但是对于集群应用,让不同的机器自动产生不同的机器id传统做法就是针对每一个机器进行单独配置,但这样做不利于集群水平扩展,且操作过程非常复杂,所以每一个机器在集群环境下是一个头疼的问题。现在借助spring+redis,给出一种策略,支持随意水平扩展,肥肠好用。 大致策略分为4步: 1.对机器ip进行hash,对某一个(大于

fetch-event-source 如何通过script全局引入

fetchEventSource源码中导出了两种类型的包cjs和esm。但是有个需求如何在原生是js中通过script标签引呢?需要加上type=module。今天介绍另一种方法 下载源码文件: https://github.com/Azure/fetch-event-source.git 安装: npm install --save-dev webpack webpack-cli ts

Spring Boot全局异常捕捉!

项目中避免不了有异常! 为了用户体验,常常把异常捕获起来,展现一个友好的页面,提醒用户! 在pom.xml中: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

文章目录 0. 概述1. 问题背景2. 问题分析3. 解决方案:手动释放资源4. 深入剖析:为什么手动调用 `reset()` 有效?5. 延伸思考:如何避免全局对象带来的问题?6. 总结 0. 概述 在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 coredump)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共

图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取

图结构在多个领域中扮演着重要角色,它能有效地模拟实体间的连接关系,通过从图中提取有意义的特征,可以获得宝贵的信息提升机器学习算法的性能。 本文将介绍如何利用NetworkX在不同层面(节点、边和整体图)提取重要的图特征。 本文将以NetworkX库中提供的Zachary网络作为示例。这个广为人知的数据集代表了一个大学空手道俱乐部的社交网络,是理解图特征提取的理想起点。 我们先定义一些辅助函数

关于OceanBase MySQL 模式中全局索引 global index 的常见问题

在OceanBase的问答区和开源社区钉钉群聊中,时常会有关于全局索引 global index的诸多提问,因此,借这篇博客,针对其中一些普遍出现的问题进行简要的解答。 什么是 global index ? 由于 MySQL 不具备 global index 的概念,因此这一问题会经常被社区版用户提及。就在前几天,就要人询问下面这个语法的意义。 create table part_tes

【python 全局解释锁】10分钟理解CPython的全局解释锁GIL

一、什么是GIL? 全局解释器锁[Global Interpreter Lock]是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。即便在多核处理器上,使用 GIL 的解释器也只允许同一时间执行一个线程,常见的使用 GIL 的解释器有CPython与Ruby MRI。可以看到GIL并不是Python独有的特性,是解释型语言处理多线程问题的一种机制而非语言特性。 多

vscode中全局代码片段怎么改名字

在使用vscode定义自己的代码片段的时候,有几个选项,如果我们选择了 vue.json 的文件定义代码片段,那么只能在 vue 文件中使用该片段,并且是 vue 文件中没有写其他代码的时候,如果 vue 文件中写了其他代码,那么 vue.json 里面定义的代码片段还还使用不了,所以我们需要定义一个全局代码片段,我下面会跟着说全局代码片段的定义以及定义了之后,怎么更改全局代码片段的名字 定义全

CI 添加公共函数 全局函数 自定义函数

CodeIgniter 中公共函数可以通过 helper 辅助函数实现。 创建 common_helper.php 文件,定义所需公共函数,存放至 application/helpers 目录中。 在 application/config/autoload.php 中配置 $autoload[‘helper’] = array(‘common’); 即可。