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

    2020-09-09 16:29:43
    ⼆维最⼤池化层和平均池化层 同卷积层⼀样,池化层每次对输⼊数据的⼀个固定形状窗⼝(⼜称池化窗⼝)中的元素计算输出。不同于卷积层里计算输⼊和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。...

    《动手学深度学习pytorch》部分学习笔记,仅用作自己复习。

    池化层

    池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。

    ⼆维最⼤池化层和平均池化层

    同卷积层⼀样,池化层每次对输⼊数据的⼀个固定形状窗⼝(⼜称池化窗⼝)中的元素计算输出。不同于卷积层里计算输⼊和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。

    让我们再次回到本节开始提到的物体边缘检测的例子。

    现在我们将卷积层的输出作为 2x2最⼤池化的输⼊。设该卷积层输⼊是 X 、池化层输出为 Y 。⽆论是 X[i, j] 和 X[i, j+1] 值不不同,还是 X[i,j+1] 和 X[i, j+2] 不不同,池化层输出均有 Y[i, j]=1 。也就是说,使⽤2x2 最⼤池化层时,只要卷积层识别的模式在⾼高和宽上移动不超过一个元素,我们依然可以将它检测出来。
    下⾯把池化层的前向计算实现在 pool2d 函数里。它跟5.1节(二维卷积层)⾥ corr2d 函数非常类似,唯一的区别在计算输出 Y 上。

    import torch
    from torch import nn
    def pool2d(X, pool_size, mode='max'):
        X = X.float()
        p_h, p_w = pool_size
        Y = torch.zeros(X.shape[0] - p_h + 1, X.shape[1] - p_w + 1)
        for i in range(Y.shape[0]):
            for j in range(Y.shape[1]):
                if mode == 'max':
                    Y[i, j] = X[i: i + p_h, j: j + p_w].max()
                elif mode == 'avg':
                    Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
         return Y

    我们可以构造图5.6中的输⼊数组 X 来验证⼆维最大池化层的输出。

    X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
    pool2d(X, (2, 2))

    输出:

    tensor([[4., 5.],
    [7., 8.]])

    实验⼀下平均池化层。

    pool2d(X, (2, 2), 'avg') 

    输出:tensor([[2., 3.],
    [5., 6.]])

    填充和步幅

    同卷积层⼀样,池化层也可以在输⼊的⾼和宽两侧的填充并调整窗⼝的移动步幅来改变输出形状。池化层填充和步幅与卷积层填充和步幅的⼯作机制⼀样。我们将通过 nn 模块⾥里里的二维最大池化层 MaxPool2d 来演示池化层填充和步幅的⼯作机制。

    # 我们先构造一个形状为(1, 1, 4, 4)的输⼊数据,前两个维度分别是批量和通道。
    X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))
    X

    输出:tensor([[[[ 0., 1., 2., 3.],
    [ 4., 5., 6., 7.],
    [ 8., 9., 10., 11.],
    [12., 13., 14., 15.]]]])

    默认情况下, MaxPool2d 实例例⾥步幅和池化窗口形状相同。下⾯使用形状为(3, 3)的池化窗口,默认获得形状为(3, 3)的步幅。

    pool2d = nn.MaxPool2d(3)
    pool2d(X)

    输出:tensor([[[[10.]]]]) 

    我们可以⼿动指定步幅和填充。

    pool2d = nn.MaxPool2d(3, padding=1, stride=2)
    pool2d(X)

    输出:tensor([[[[ 5., 7.],
    [13., 15.]]]])

    当然,我们也可以指定⾮正方形的池化窗⼝,并分别指定⾼和宽上的填充和步幅。

    pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 3))
    pool2d(X)

    输出:tensor([[[[ 1., 3.],
    [ 9., 11.],
    [13., 15.]]]])

    多通道

    在处理理多通道输⼊数据时,池化层对每个输⼊通道分别池化,⽽不是像卷积层那样将各通道的输入按通道相加。这意味着池化层的输出通道数与输⼊通道数相等。下⾯将数组 X 和 X+1 在通道维上连结来构造通道数为2的输入。

    X = torch.cat((X, X + 1), dim=1)
    X

    输出:

    tensor([[[[ 0., 1., 2., 3.],
    [ 4., 5., 6., 7.],
    [ 8., 9., 10., 11.],
    [12., 13., 14., 15.]],
    [[ 1., 2., 3., 4.],
    [ 5., 6., 7., 8.],
    [ 9., 10., 11., 12.],
    [13., 14., 15., 16.]]]])

    池化后,我们发现输出通道数仍然是2。

    pool2d = nn.MaxPool2d(3, padding=1, stride=2)
    pool2d(X)

    输出:

    tensor([[[[ 5., 7.],
    [13., 15.]],
    [[ 6., 8.],
    [14., 16.]]]])

    小结

    • 最⼤池化和平均池化分别取池化窗⼝中输⼊元素的最大值和平均值作为输出。
    • 池化层的⼀个主要作用是缓解卷积层对位置的过度敏感性。
    • 可以指定池化层的填充和步幅。
    • 池化层的输出通道数跟输⼊入通道数相同。
    展开全文
  • 池化层理解

    万次阅读 多人点赞 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,如此类推。

    展开全文
  • 最大池化层和平均池化层

    千次阅读 2021-04-20 14:29:28
    参考链接: ...著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 概念: 接触到pooling主要是在用于图像处理的卷积神经网络中,但随着深层神经网络的发展...与卷积层类似,池化层运算符由一个固定形

    参考链接:
    https://blog.csdn.net/junmuzi/article/details/53206600
    https://blog.csdn.net/qq_21190081/article/details/72871704
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    概念:

    接触到pooling主要是在用于图像处理的卷积神经网络中,但随着深层神经网络的发展,pooling相关技术在其他领域,其他结构的神经网络中也越来越受关注。

    与卷积层类似,池化层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为 池化窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。 相反,池运算符是确定性的,我们通常计算池化窗口中所有元素的最大值或平均值。这些操作分别称为 最大池化层 (maximum pooling)和 平均池化层 (average pooling)。

    在这里插入图片描述
    在这两种情况下,与互相关运算符一样,池化窗口从输入张量的左上角开始,从左到右、从上到下的在输入张量内滑动。在池化窗口到达的每个位置,它计算该窗口中输入子张量的最大值或平均值,具体取决于是使用了最大池化层还是平均池化层。

    **

    作用:

    pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。

    pooling目的是为了保持某种不变性(旋转、平移、伸缩等)

    根据相关理论,特征提取的误差主要来自两个方面:

    (1)邻域大小受限造成的估计值方差增大;

    (2)卷积层参数误差造成估计均值的偏移。
    重点作用:
    1、mean-pooling能减小第一种误差(邻域大小受限造成的估计值方差增大),更多的保留图像的背景信息,
    2、max-pooling能减小第二种误差(卷积层参数误差造成估计均值的偏移),更多的保留纹理信息。

    正向与反向过程:

    **正向:**max-pooling:取池化区域的最大值;
    mean-polling:取池化区域的平均值

    **反向
    **对于mean pooling,真的是好简单:假设pooling的窗大小是2x2, 在forward的时候啊,就是在前面卷积完的输出上依次不重合的取2x2的窗平均,得到一个值就是当前mean pooling之后的值。backward的时候,把一个值分成四等分放到前面2x2的格子里面就好了。如下

    forward: [1 3; 2 2] -> [2]
    backward: [2] -> [0.5 0.5; 0.5 0.5]
    在这里插入图片描述

    max pooling就稍微复杂一点,forward的时候你只需要把2x2窗子里面那个最大的拿走就好了,backward的时候你要把当前的值放到之前那个最大的位置,其他的三个位置都弄成0。如下

    forward: [1 3; 2 2] -> 3
    backward: [3] -> [0 3; 0 0]

    在这里插入图片描述

    展开全文
  • 卷积层与池化层

    万次阅读 多人点赞 2018-08-04 16:08:16
    卷积神经网络(Convolutional Neural Layer, CNN),除了全连接层以外(有时候也不含全连接层,因为出现了Global average pooling),还包含了卷积层和池化层。卷积层用来提取特征,而池化层可以减少参数数量。 卷...

    构建了最简单的网络之后,是时候再加上卷积和池化了。这篇,虽然我还没开始构思,但我知道,一定是很长的文章。

    卷积神经网络(Convolutional Neural Layer, CNN),除了全连接层以外(有时候也不含全连接层,因为出现了Global average pooling),还包含了卷积层和池化层。卷积层用来提取特征,而池化层可以减少参数数量。

    卷积层

    先谈一下卷积层的工作原理。

    我们是使用卷积核来提取特征的,卷积核可以说是一个矩阵。假如我们设置一个卷积核为3*3的矩阵,而我们图片为一个分辨率5*5的图片。那么卷积核的任务就如下所示:

    从左上角开始,卷积核就对应着数据的3*3的矩阵范围,然后相乘再相加得出一个值。按照这种顺序,每隔一个像素就操作一次,我们就可以得出9个值。这九个值形成的矩阵被我们称作激活映射(Activation map)。这就是我们的卷积层工作原理。也可以参考下面一个gif:
    其中,卷积核为

    101010101 1 0 1 0 1 0 1 0 1

    其实我们平时举例的卷积核已经被翻转180度一次了,主要是因为计算过程的原因。详细不用了解,但原理都一样。

    但其实我们输入的图像一般为三维,即含有R、G、B三个通道。但其实经过一个卷积核之后,三维会变成一维。它在一整个屏幕滑动的时候,其实会把三个通道的值都累加起来,最终只是输出一个一维矩阵。而多个卷积核(一个卷积层的卷积核数目是自己确定的)滑动之后形成的Activation Map堆叠起来,再经过一个激活函数就是一个卷积层的输出了。

    卷积层还有另外两个很重要的参数:步长和padding。

    所谓的步长就是控制卷积核移动的距离。在上面的例子看到,卷积核都是隔着一个像素进行映射的,那么我们也可以让它隔着两个、三个,而这个距离被我们称作步长。

    而padding就是我们对数据做的操作。一般有两种,一种是不进行操作,一种是补0使得卷积后的激活映射尺寸不变。上面我们可以看到5*5*3的数据被3*3的卷积核卷积后的映射图,形状为3*3,即形状与一开始的数据不同。有时候为了规避这个变化,我们使用“补0”的方法——即在数据的外层补上0。

    下面是示意图:

    步长2
    步长为2 (图片来自于机器之心
    补0
    补0的变化 (图片来自于机器之心

    了解卷积发展史的人都应该知道,卷积神经网络应用最开始出现是LeCun(名字真的很像中国人)在识别手写数字创建的LeNet-5。

    LeNet-5

    后面爆发是因为AlexNet在ImageNet比赛中拔得头筹,硬生生把误差变成去年的一半。从此卷积网络就成了AI的大热点,一大堆论文和网络不断地发挥它的潜能,而它的黑盒性也不断被人解释。

    能否对卷积神经网络工作原理做一个直观的解释? - Owl of Minerva的回答 - 知乎里面通过我们对图像进行平滑的操作进而解释了卷积核如何读取特征的。

    我们需要先明确一点,实验告诉我们人类视觉是先对图像边缘开始敏感的。在我的理解中,它就是说我们对现有事物的印象是我们先通过提取边界的特征,然后逐渐的完善再进行组装而成的。而我们的卷积层很好的做到了这一点。

    这是两个不同的卷积核滑动整个图像后出来的效果,可以看出,经过卷积之后图像的边界变得更加直观。我们也可以来看下VGG-16网络第一层卷积提取到的特征:

    VGG-16

    由此来看,我们也知道为什么我们不能只要一个卷积核。在我的理解下,假使我们只有一个卷积核,那我们或许只能提取到一个边界。但假如我们有许多的卷积核检测不同的边界,不同的边界又构成不同的物体,这就是我们怎么从视觉图像检测物体的凭据了。所以,深度学习的“深”不仅仅是代表网络,也代表我们能检测的物体的深度。即越深,提取的特征也就越多。

    Google提出了一个项目叫Deepdream,里面通过梯度上升、反卷积形象的告诉我们一个网络究竟想要识别什么。之前权重更新我们讲过梯度下降,而梯度上升便是计算卷积核对输入的噪声的梯度,然后沿着上升的方向调整我们的输入。详细的以后再讲,但得出的图像能够使得这个卷积核被激活,也就是说得到一个较好的值。所以这个图像也就是我们卷积核所认为的最规范的图像(有点吓人):

    Deepdream
    其实这鹅看着还不错,有点像孔雀。

    池化层 (pooling layer)

    前面说到池化层是降低参数,而降低参数的方法当然也只有删除参数了。

    一般我们有最大池化和平均池化,而最大池化就我认识来说是相对多的。需要注意的是,池化层一般放在卷积层后面。所以池化层池化的是卷积层的输出!

    扫描的顺序跟卷积一样,都是从左上角开始然后根据你设置的步长逐步扫描全局。有些人会很好奇最大池化的时候你怎么知道哪个是最大值,emmm,其实我也考虑过这个问题。CS2131n里面我记得是说会提前记录最大值保存在一个矩阵中,然后根据那个矩阵来提取最大值。

    至于要深入到计算过程与否,应该是没有必要的。所以我也没去查证过程。而且给的都是示例图,其实具体的计算过程应该也是不同的,但效果我们可以知道就好了。

    至于为什么选择最大池化,应该是为了提取最明显的特征,所以选用的最大池化。平均池化呢,就是顾及每一个像素,所以选择将所有的像素值都相加然后再平均。

    池化层也有padding的选项。但都是跟卷积层一样的,在外围补0,然后再池化。

    代码解析
    import tensorflow as tf
    import numpy as np
    from tensorflow.examples.tutorials.mnist import input_data
    
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    summary_dir = './summary'
    #批次
    batch_size = 100
    
    n_batch = mnist.train.num_examples // batch_size
    
    x = tf.placeholder(tf.float32, [None, 784], name='input')
    y = tf.placeholder(tf.float32, [None, 10], name='label')
    
    def net(input_tensor):
        conv_weights = tf.get_variable('weight', [3, 3, 1, 32],
                                        initializer=tf.truncated_normal_initializer(stddev=0.1))
        conv_biases = tf.get_variable('biase', [32], initializer=tf.constant_initializer(0.0))
    
        conv = tf.nn.conv2d(input_tensor, conv_weights, strides=[1, 1, 1, 1], padding='SAME')
        relu = tf.nn.relu(tf.nn.bias_add(conv, conv_biases))
    
        pool = tf.nn.max_pool(relu, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')
    
        pool_shape = pool.get_shape().as_list()
        nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]
        pool_reshaped = tf.reshape(pool, [-1, nodes])
    
        W = tf.Variable(tf.zeros([nodes, 10]), name='weight')
        b = tf.Variable(tf.zeros([10]), name='bias')
        fc = tf.nn.softmax(tf.matmul(pool_reshaped, W) + b)
    
        return fc
    
    reshaped = tf.reshape(x, (-1, 28, 28, 1))
    prediction = net(reshaped)
    loss_ = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(y, 1), logits=prediction, name='loss')
    loss = tf.reduce_mean(loss_)
    
    train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32), name='accuracy')
    
    init = tf.global_variables_initializer()
    
    with tf.Session() as sess:
        sess.run(init)
        for epoch in range(31):
            for batch in range(n_batch):
                batch_xs, batch_ys = mnist.train.next_batch(batch_size)
                sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys})
            acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})
            print('Iter' + str(epoch) + ",Testing Accuracy" + str(acc))

    这相对于我第一个只用全连接的网络只多了一个net函数,还有因为卷积层的关系进来的数据x需要改变形状。只讲这两部分:

    reshaped = tf.reshape(x, (-1, 28, 28, 1))
    prediction = net(reshaped)

    由于我们feedict上面是,feed_dict={x: mnist.test.images, y: mnist.test.labels},而这样子调用tensorflow的句子我们得到的x固定的形状。因此我们应用tf.reshape(x_need_reshaped,object_shape)来得到需要的形状。

    其中的 1 − 1 表示拉平,不能用None,是固定的。

    conv_weights = tf.get_variable('weight', [3, 3, 1, 32],
                                        initializer=tf.truncated_normal_initializer(stddev=0.1))
    conv_biases = tf.get_variable('biase', [32], initializer=tf.constant_initializer(0.0))
    
    conv = tf.nn.conv2d(input_tensor, conv_weights, strides=[1, 1, 1, 1], padding='SAME')
    relu = tf.nn.relu(tf.nn.bias_add(conv, conv_biases))
    
    pool = tf.nn.max_pool(relu, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')

    大部分都是应用内置的函数,来初始化weight(就是卷积核)和biases(偏置项)。偏置项我们没有提到,但其实就是多了一个参数来调控,因此我们讲卷积层的时候也没怎么讲。按照代码就是出来Activation Map之后再分别加上bias。池化也是用到了最大池化。

    注意一下relu。它也是一个激活函数,作用可以说跟之前讲的softmax一样,不过它在卷积层用的比较多,而且也是公认的比较好的激活函数。它的变体有很多。有兴趣大家可以自己去查阅资料。以后才会写有关这方面的文章。

        pool_shape = pool.get_shape().as_list()
        nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]
        pool_reshaped = tf.reshape(pool, [-1, nodes])
    
        W = tf.Variable(tf.zeros([nodes, 10]), name='weight')

    池化层的输出我们并不知道它是如何的形状(当然,你也可以动手算)。因此就算把池化层拉成一维的矩阵,我们也不知道W需要如何的形状。因此,我们查看pool(即池化层的输出)的形状,我暗地里print了一下为[None, 14, 14, 32],因此pool拉平后,就是[None, 14*14*32, 10]。为了接下来进行全连接层的计算,我们的W的形状也应该为[14*14*32, 10]。这段代码的原理就是如此。

    准确率也一样取后15次:

    结果

    emmm, 不用跟之前比了,明显比以前好很多了。下一章决定总结一下,优化的方法好了。

    参考
    https://mlnotebook.github.io/post/CNN1/(可惜是全英)
    能否对卷积神经网络工作原理做一个直观的解释? - Owl of Minerva的回答 - 知乎
    CS231n

    展开全文
  • 10 池化层

    2021-08-18 18:04:47
    池化层的作用是缓解卷积层对位置的过度敏感,解决图像中的物体出现的像素点偏移的问题 池化层分为最大池化层和平均池化层 也可以设置填充和步幅 pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 3)) 在...
  • 池化层的作用

    2021-08-19 22:31:31
    在卷积神经网络中常常会在相邻的卷积层中间加入池化层池化层可以有效缩小参数矩阵的尺寸,从而减少参数数量,所以加入池化层可以加快计算速度和防止过拟合。 列举一下的话可以有: 完成下采样 去除冗余信息,对...
  • PyTorch——池化层

    2021-03-07 14:00:09
    二维最大池化层和平均池化层 池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性。 同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核...
  • 池化层有最大池化层和平均池化层 池化层只会改变图片的尺寸(高度与宽度)不会改变图片的深度(通道) 最大池化层最后的结果是你选择核大小遍历的框里面把最大的值取出来组成的一个新的特征图 池化层主要做的是下采样 ...
  • 池化层&线性层

    2021-02-04 16:35:42
    池化层&线性层1.池化层-Pooling Layer1.1 nn.MaxPool2d1.2 nn.AvgPool2d1.3 nn.MaxUnpool2d2.线性层-Linear Layer 1.池化层-Pooling Layer 池化可实现冗余信息的剔除以及减小后续计算量。 下采样:将大尺寸...
  • 池化层基础

    2021-03-16 21:55:33
    池化层基础 池化层:一种形式的降采样。 池化:是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。 池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,也在一定程度 上控制了过拟合。...
  • 而对于常见的卷积神经网络,我们经常可以看到卷积层、池化层、激活函数、全连接层的身影。直到现在,卷积层+池化层+激活函数+全连接层的结构仍然很实用,似乎已经成为搭建卷积神经网络的基本结构。下面我将从这四个...
  • Pytorch学习——池化层

    2021-07-30 08:06:59
    什么是池化层 池化层的来源 池化层是深度学习中常用组件之一,在当前大部分的神经网络结构中都会使用池化层池化层最早来源于LeNet一文,当时被称为SumSample。在AlexNet之后采用Pooling命名, 后续沿用了该命名...
  • 池化层 pool

    千次阅读 2018-12-03 12:26:09
    池化层 pool 池化层,可以降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。 最常见的形式是池化层使用尺寸 2×22 \times 22×2 的滤波器,以步长为 222 来对每...
  • 全局池化层

    2021-10-02 22:43:33
    全局池化层:global average pooling 作用:替代全连接层,减少参数量,主要是用来解决全连接的问题,其主要是是将最后一层的特征图进行整张图的一个均值池化,形成一个特征点,将这些特征点组成最后的特征向量,...
  • 杂谈池化层

    2019-09-07 18:58:38
    池化层是模仿人的视觉系统对数据进行降维,用更高层次的特征表示图像。 实施池化的目的:(1) 降低信息冗余;(2) 提升模型的尺度不变性、旋转不变性;(3) 防止过拟合。 池化层的常见操作包含以下几种:最大值池化,...
  • 卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层)卷积层用它来进行特征提取,如下: 输入图像是32*32*3...
  • 池化层实现

    千次阅读 2016-12-30 22:19:52
    池化层的推导 池化层的输入一般来源于上一个卷积层,主要作用是提供了很强的鲁棒性(例如max-pooling是取一小块区域中的最大值,此时若此区域中的其他值略有变化,或者图像稍有平移,pooling后的结果仍不变),...
  • 池化层的作用总结:

    万次阅读 多人点赞 2020-01-06 16:45:45
    池化层的作用总结: 在卷积神经网络中通常会在相邻的卷积层之间加入一个池化层池化层可以有效的缩小参数矩阵的尺寸,从而减少最后连接层的中的参数数量。所以加入池化层可以加快计算速度和防止过拟合的作用。 池化...
  • 漫谈池化层

    2019-11-04 13:06:30
    原文链接:漫谈池化层 | Hey~YaHei! 参考: 《Hands-On Machine Learning with Scikit-Learn and TensorFlow(2017)》Chap13 《Hands-On Machine Learning with Scikit-Learn and TensorFlow》笔记 《卷积神经网络...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,131
精华内容 26,052
关键字:

池化层