精华内容
下载资源
问答
  • 池化

    2020-09-08 21:18:54
    池化

    池化

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 综述:最大池化,平均池化,全局最大池化和全局平均池化?区别原来是这样

    综述:最大池化,平均池化,全局最大池化和全局平均池化?区别原来是这样


    摘要

    创建ConvNets通常与池化层并驾齐驱。更具体地说,我们经常看到其他层,例如最大池化。但是他们是什么?为什么有必要,以及它们如何帮助训练机器学习模型?以及如何使用它们?

    我们在此博客文章中回答这些问题。

    首先,我们将从概念层面看一下池化操作。我们探索了ConvNet的内部工作原理,并通过此分析显示了合并层如何帮助这些模型中生成的空间层次结构。然后,我们继续确定池的四种类型-最大池化,平均池化,全局最大池化和全局平均池化。

    随后,我们从理论转向实践:我们展示池化如何在Keras(当今最广泛使用的深度学习框架)中表示。然后,我们通过基于MaxPooling的示例来结束本博客。

    什么是池化?

    假设您正在训练卷积神经网络。您的目标是对数据集中的图像进行分类。由您的神经网络中的第一卷积层执行的操作可以表示如下:
    在这里插入图片描述

    该层的输入是图像,高度为 H,宽度 w ^并具有三个渠道。因此,它们很可能是RGB图像。使用3x3x3内核,对输入图像执行卷积运算,生成N所谓的“特征图”的大小Hfm×WfmH_{f m} \times W_{f m}。一个特征图学习图像中存在的一个特定特征。通过激活,这些特征图有助于训练过程中的结果预测以及新数据的预测。N可以在开始训练过程之前由机器学习工程师进行配置。

    在上述示例的情况下,图像为32 x 32像素,第一个卷积操作(假设步长为1,无任何填充)将生成30 x 30像素的特征图;说我们设置N= 64,则将在第一层中生成64个此类地图。

    对输入进行下采样

    现在让我们退后一步,想一想成功训练ConvNet所要实现的目标。假设我们有一个图像分类器,其主要目标是正确分类图像。

    如果我们像人类那样去做,那么我们将同时关注细节和高级模式。

    现在,让我们再次看一下特征图的概念。在第一层中,您将基于图像的“具体”方面学习特征图。在此,特征图由图像中的非常低级的元素组成,例如曲线和边缘,也称为细节。但是,我们看不到只有一个卷积层的高级模式。我们需要很多人一起学习这些模式。这也称为建立空间层次结构(Chollet,2017)。良好的空间层次结构从下到上移动时基本上可以汇总数据,就像金字塔一样。这是一个好人与一个坏人:

    在这里插入图片描述
    好的空间层次结构(左)与较差的空间层次结构(右)。

    如您所知,在ConvNet的卷积操作中,有一个小块在整个输入图像上滑动,并对当前滑动的图像部分进行逐元素乘法运算(Chollet,2017)。这是一个相对昂贵的操作。难道不能以更简单的方式做到这一点吗?我们真的需要仅由卷积建立层次结构吗?答案是否定的,池化操作证明了这一点。

    引入池化

    这是池化的一种定义:

    池化基本上是“downscaling”从先前图层获得的图像。可以将其与缩小图像以减小其像素密度进行比较。

    好吧,缩小比例。但这也可以通过更简单的方式完成:通过执行诸如的硬编码张量操作max,而不是通过学习的变换,我们不需要学习权重的相对昂贵的操作(Chollet,2017)。这样,我们只需花费一小部分成本就能获得一个不错的,可能有用的空间层次结构。

    在本博文的其余部分,我们介绍了四种类型的池化操作:

    最大池化Max Pooling;
    平均池化Average pooling;
    全局最大池化Global max pooling;
    全局平均池化Global average pooling.
    让我们先来看一下Max Pooling。

    最大池化

    假设这是来自ConvNet的4 x 4像素特征图之一:
    在这里插入图片描述

    如果要对它进行降采样,则可以使用称为“最大池化”的池化操作(更具体地说,这是二维最大池化)。在此合并操作中,H× W “块”滑过输入数据,其中 H 是高度和 w 宽度。步幅(即在滑动操作过程中步幅)通常等于池的大小,因此其作用等于减小高度和宽度。

    对于每个块或“池”,操作仅涉及计算max,像这样:
    在这里插入图片描述

    对每个池这样做,我们得到了很好的降采样结果,极大地受益于我们需要的空间层次结构:

    在这里插入图片描述

    Max Pooling如何帮助平移不变性

    除了便宜地代替卷积层之外,最大池化在ConvNet中非常有用的另一个原因是:平移不变性。

    当模型是平移不变的时,则意味着图片中的对象不在哪里都无关紧要;无论如何,它将被识别。例如,如果我将电话放在头部附近或口袋附近,则两次电话都应属于分类的同一个。

    可以想象,在模型中实现平移不变性将极大地提高其预测能力,因为您不再需要提供对象恰好位于所需位置的图像。相反,您仅可以提供包含对象的大量图像,并可能获得性能良好的模型。

    现在,最大池化如何在神经网络中实现平移不变性?

    假设我们有一个1像素的对象,这有点奇怪,因为对象通常是多像素,但这对我们的解释很有帮助。该对象具有最高的对比度,因此会为输入图像中的像素生成较高的值。假设上图红色部分中(0,4)处的4是我们选择的像素。如我们所见,对于最大池化,它仍然包含在输出中。

    现在,假设该对象(即4)不在(0,4),而是在(1,3)。它会从模型中消失吗?不会。最大池化层的输出仍将为4。因此,对象位于红色块中的位置并不重要,因为无论如何它都会被“捕获”。

    这就是为什么最大池化意味着平移不变性,以及它真正有用的原因,除了相对便宜(计算少)之外。

    如果对象是在任何非红色区域中,识别将会发生在那个地方,但只有当没有什么更大的像素值存在的情况下。因此,如果仅提供对象始终位于很小 区域的图片,则最大池化不会产生平移不变性。但是,如果您的数据集变化很大,并且对象位于不同的位置,则最大池化确实会真正有益于模型的性能。

    为什么最大池化是最常用的池化操作

    接下来,我们将看平均池化,这是另一个池化操作。它可以用作Max Pooling的直接替代。但是,当您查看神经网络理论(例如Chollet,2017)时,您会发现Max Pooling一直都是首选。

    为什么会这样呢?

    论点相对简单:由于感兴趣的对象可能会产生最大的像素值,因此在某个块中采用最大值比采用平均值会更有趣(Chollet,2017)。

    糟糕,现在我已经放弃了平均池的功能🙂

    平均池化

    池化层的另一种类型是平均池化层。这里,计算每个块的avg而不是max:

    在这里插入图片描述
    如您所见,输出也有所不同-与“最大池化”相比,不是那么极端了:

    在这里插入图片描述
    平均池与最大池化的不同之处在于,它保留了有关块或池中“次重要”元素的大量信息。尽管“最大池化”只是通过选择最大值来丢弃它们,但“平均池化”将它们混合在一起。这在各种情况下有用,其中此类信息很有用。我们将在下一节中看到一个。

    为什么要考虑平均池化?

    在互联网上,可以找到许多赞成和反对平均池化的论点,通常建议采用最大池化作为替代方案。答案主要是解决上述差异。

    例如:

    因此,要回答您的问题,我认为平均池比最大池化没有任何明显的优势。但是,在某些情况下,最大池化过滤器中的方差不大,两个池化将给出相同的类型结果。但是在极端情况下,最大池化肯定会提供更好的结果。

    但是也:

    我还要增加一个论点–最大池化层在保留局部信息方面效果较差。

    因此,唯一正确的答案是:它完全取决于您要解决的问题。

    如果对象的位置不重要,则“最大池化”似乎是更好的选择。如果是这样,则使用平均池似乎可以实现更好的结果。

    全局最大池化

    池化层的另一种类型是全局最大池化层。在这里,我们将池大小设置为等于输入大小,以便max将整个输入的都计算为输出值(Dernoncourt,2017):

    在这里插入图片描述
    或者,以不同的方式可视化它:

    在这里插入图片描述
    全局池化可以在多种情况下使用。首先,它可用于减少某些卷积层输出的特征图的维数,以取代分类器中的Flattening甚至有时是Dense层(Christlein,2019)。此外,它还可以用于 word spotting(Sudholt&Fink,2016)。这是由于其允许检测噪声的特性,因此可以“大输出”(例如,上例中的值9)。但是,这也是全局最大池化的缺点之一,与常规方法一样,我们接下来将介绍全局平均池化。

    全局平均池化

    应用全局平均池化时,池大小仍设置为图层输入的大小,但取最大值而不是最大值:
    在这里插入图片描述

    或者,再次以不同的方式可视化时:

    在这里插入图片描述
    它们通常用于替换分类器中的全连接层或密集连接层。取而代之的是,模型以卷积层结束,该卷积层生成与目标类数量一样多的特征图,并对每个特征集应用全局平均池化,以便将每个特征图转换为一个值(Mudau,nd)。由于特征图可以识别输入数据中的某些元素,因此最后一层中的图可以有效地学习以“识别”该体系结构中特定类的存在。通过将由全局平均池化生成的值输入到Softmax激活函数中,您可以再次获得所需的多类概率分布。

    而且,由于“分类器”对“特征提取器”的固有性(nativeness )(它们都是卷积的,而不是dense layer),这种方法可能会提高模型性能,并且由于没有参数需要学习,可用于减少过拟合.

    Keras API中的池层

    现在让我们看一下Keras如何在其API中表示池化层。

    最大池化

    Max Pooling具有一维,二维和三维形式(Keras,nd)。一维变量可以与Conv1D层一起使用,因此可以用于时间数据:

    keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid', data_format='channels_last')
    
    

    在此,可以通过设置池大小为整数值pool_size,跨度和填充,并可以设置数据格式。使用大步None距pool_size(如果保留默认值,则为大步距),可以定义池在输入上“跳跃”多少;在默认情况下减半。使用填充时,如果由于池和输入大小之间的不兼容性而导致边缘保留下来,我们可能会考虑这些边缘。最后,数据格式告诉我们有关数据集的渠道策略(首先是渠道还是最后是渠道)的信息。

    Max Pooling也可用于2D数据,可与Conv2D一起用于空间数据(Keras,nd):

    keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
    

    该API确实非常相似,除了pool_size。可以将其定义为整数值(例如pool_size = 3),但将在(3, 3)内部将其转换为整数。显然,您也可以设置一个元组,从而在池的形状上具有更大的灵活性。

    3D Max Pooling可用于空间或时空数据(Keras,nd):

    keras.layers.MaxPooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)
    
    

    在这里,同样的情况适用于pool_size:它既可以设置为整数值,也可以设置为三维元组。

    平均池化

    对于平均池,该API与最大池化没有什么不同,因此,除了API表示法(Keras,nd)之外,我在这里不再重复其他内容:

    keras.layers.AveragePooling1D(pool_size=2, strides=None, padding='valid', data_format='channels_last')
    keras.layers.AveragePooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
    keras.layers.AveragePooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)
    

    全局最大池化

    由于全局池化的独特结构(池形状等于输入形状),它们在Keras API中的表示非常简单。例如,对于全局最大池化(Keras,nd):

    keras.layers.GlobalMaxPooling1D(data_format='channels_last')
    keras.layers.GlobalMaxPooling2D(data_format='channels_last')
    keras.layers.GlobalMaxPooling3D(data_format='channels_last')
    

    在这里,唯一要配置的是data_format,它告诉我们有关数据中维顺序的信息,可以是channels_last或channels_first。

    全局平均池化

    对于全局平均池化化(Keras,nd)可以观察到同样的情况:

    keras.layers.GlobalAveragePooling1D(data_format='channels_last')
    keras.layers.GlobalAveragePooling2D(data_format='channels_last')
    keras.layers.GlobalAveragePooling3D(data_format='channels_last')
    

    Keras的Conv2D和合并示例

    现在我们知道了池化层以及它们在Keras中的表示方式,我们可以举个例子。在此示例中,我们将向您展示之前创建的模型,以展示稀疏分类交叉熵的工作原理。因此,在这里没有为您显示创建模型的所有步骤。

    但是我们要做的是向您展示应用池化的片段。这里是:

    # Create the model
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(256, activation='relu'))
    model.add(Dense(no_classes, activation='softmax'))
    

    本质上,这是我们模型的架构。使用Sequential API,您可以看到我们添加了Conv2D图层,然后添加了具有(2, 2)池大小的MaxPooling2D图层-每次都有效地将输入减半。有助于提高模型的泛化能力。

    Charles@Sunway, 3rd, April,2020

    展开全文
  • 池化与非池化

    2017-12-18 13:55:34
    在使用arcgis后,发现很多问题,学习之后了解到,池化与非池化的概念,例如请求ogc服务中,客户端向服务器请求实例,若池化则会是获取和释放,若非池化,则是创建与关闭。这几个字已经很清楚了,我理解就像是数据库...

    在使用arcgis后,发现很多问题,学习之后了解到,池化与非池化的概念,例如请求ogc服务中,客户端向服务器请求实例,若池化则会是获取和释放,若非池化,则是创建与关闭。这几个字已经很清楚了,我理解就像是数据库连接池一样的作用。

    开始的问题出现在请求wms时一个客户端请求8个图层会出现卡顿,bug,原因不明,后发现改池化中的最大最小实例数能有效的解决这一问题,因在普通计算机上测试,arcgis server启动服务后,池化我设置成最小0,最大20,应该可以有20个实例,然而,两个客户端同时打开并请求8个服务没问题,但普通计算机会变得很卡,4g内存基本满,cpu蹦到100,应该加个切片缓存一类的东西。

    展开全文
  • 池化层理解

    万次阅读 多人点赞 2019-04-15 14:31:41
    参考网址: ...池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。 简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。 下采样层也叫池化层,其具体操作与卷积层...

    参考网址:

    https://www.zhihu.com/question/36686900/answer/130890492

    https://www.cnblogs.com/skyfsm/p/6790245.html

    池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
    简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

    下采样层也叫池化层,其具体操作与卷积层的操作基本相同,只不过下采样的卷积核为只取对应位置的最大值、平均值等(最大池化、平均池化),即矩阵之间的运算规律不一样,并且不经过反向传播的修改。

    池化层的作用:

    个人觉得主要是两个作用:
    1. invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)
    2. 保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力

    A: 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

    B. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用

    (1) translation invariance:
    这里举一个直观的例子(数字识别),假设有一个16x16的图片,里面有个数字1,我们需要识别出来,这个数字1可能写的偏左一点(图1),这个数字1可能偏右一点(图2),图1到图2相当于向右平移了一个单位,但是图1和图2经过max pooling之后它们都变成了相同的8x8特征矩阵,主要的特征我们捕获到了,同时又将问题的规模从16x16降到了8x8,而且具有平移不变性的特点。图中的a(或b)表示,在原始图片中的这些a(或b)位置,最终都会映射到相同的位置。

    (2) rotation invariance:
    下图表示汉字“一”的识别,第一张相对于x轴有倾斜角,第二张是平行于x轴,两张图片相当于做了旋转,经过多次max pooling后具有相同的特征

    池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。这里就说一下Max pooling,其实思想非常简单。

     

    对于每个2*2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2*2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。

    展开全文
  • 池化

    2020-09-09 16:29:43
    同卷积层⼀样,池化层每次对输⼊数据的⼀个固定形状窗⼝(⼜称池化窗⼝)中的元素计算输出。不同于卷积层里计算输⼊和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或...
  • 最大池化层: 、计算最大值和记录最大值所在输入数据中的位置 、缩减模型的大小 、提高计算速度 、减少无用信息的影响 、提高所提取特征的鲁棒性(最大值) 计算池化层 卷积层输出大小的公式同样适用于最大池化,(n+2p...
  • 目录  Same最大值池化  多深度的same池化  Same平均值池化  Valid池化 ...池化操作分为same池化和valid池化,同时还可以设置移动的步长 Same最大值池化 举例:4行4列的张量x和...
  • 1.2 池化的分类1.3 池化的特点1.3 池化的意义1.4 其它池化方式1.5 池化和卷积的比较1.6 卷积和池化的组合使用二: 反池化2.1 反平均池化2.2 反最大池化 一、池化 1.1 什么是池化?      ...
  • 池化方法

    2020-04-15 09:52:52
    池化方法 池化操作是卷积神经网络中的一个特殊的操作,主要就是在一定的区域内提出该区域的关键信息(一个亚采样过程)。其操作往往出现在卷积层之后,它能起到减少卷积层输出的特征量数目的作用,从而能减少模型参数...
  • 空间金字塔池化

    2019-03-19 10:29:22
    Deeplab Semantic image segmentation with deep convolutional nets, atrous convolution 空间金字塔池化的文章
  • 池化技术

    2019-09-13 18:31:44
    池化技术 简单来说就是提前保存大量的资源,以备不时之需 核心是复用 池化技术作用 复用相同的资源,减少浪费,减少新建和销毁的成本; 减少单独管理的成本,统一交由"池"; 集中管理,减少"碎片"; 提高系统响应...
  • [CNN] 卷积、反卷积、池化、反池化

    万次阅读 多人点赞 2018-11-28 17:03:55
    之前一直太忙,没时间整理,这两天抽出点时间整理一下卷积、反卷积、池化、反池化的内容。 一、卷积 1、卷积的简单定义 卷积神经网络中的卷积操作可以看做是输入和卷积核的内积运算。其运算过程非常容易理解,...
  • 传统池化:规则形状N×N的常规空间池化本文的方法:引入一种称为条带池化的新池化策略来重新考虑空间池化的公式,该策略考虑了一个长而窄的核,即1×N或 N×1。本文基于条带池化,通过以下步骤研究空间池化体系结构...
  • 池化函数

    2019-02-10 11:52:17
    在CNN中,池化函数一般放在卷积层之后,图片经过卷积层,获得的特征更加适合分类器的学习,然而如果进行的是同卷积或者全卷积,得到的特征大小不比原来的小,这样我们就需要降维,为此引入池化函数。 池化函数tf.nn...
  • 金字塔池化

    2020-09-29 21:13:56
    金字塔池化,大的预测边界框和小的预测边界框的特征图是不一样的,为了使得FC
  • 最大池化与平均池化的选择

    千次阅读 2019-08-09 14:32:39
    在目标对象是偏向于纹理、轮廓是,选用最大池化较好 在目标对象时偏向于背景或其他信息是,选用平均池化较好 在可以在较浅层使用最大池化,用来过滤无用的信息,在较深层使用平均池化,防止丢掉太多高维信息 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,605
精华内容 4,642
关键字:

池化