美文网首页Python数据科学
深度学习入门--卷积神经网络-池化层

深度学习入门--卷积神经网络-池化层

作者: 爱吃西瓜的番茄酱 | 来源:发表于2019-04-23 10:12 被阅读2次

池化是一种缩小空间大小的运算,池化有Max池化Averae池化两种。Max池化是取出目标区域的最大值;Averae池化是计算目标区域的平均值。在图像识别领域,主要使用Max池化。因此下文所提及的池化均是Max池化

下图是一个Max池化处理的示意图:

这个例子中,步幅为2,所以2 x 2的窗口的移动间隔为2个元素,每次从2 x 2的区域取出最大值。

一般来说,池化的窗口大小会和步幅设定成相同的值。比如,3 x 3的窗口的步幅会设定为3;4 x 4 的窗口的步幅会设定为4。

池化层的特点:

  • 没有要学习的参数: 池化知识从目标区域取出最大值或平均值,所以不存在要学习的参数。
  • 通道数不会变化: 池化计算是按通道独立进行的。
  • 对微小的位置变化具有鲁棒性(健壮性):输入数据发生微小的变化时,池化仍会返回相同的结果。

池化层的实现

池化层的实现和卷积层相同,都使用im2col函数展开输入数据:

class Pooling:
    def __init__(self, pool_h, pool_w, stride=1, pad=0):
        self.pool_h = pool_h
        self.pool_w = pool_w
        self.stride = stride
        self.pad = pad
        
        self.x = None
        self.arg_max = None

    def forward(self, x):
        N, C, H, W = x.shape
        out_h = int(1 + (H - self.pool_h) / self.stride)
        out_w = int(1 + (W - self.pool_w) / self.stride)

        col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)
        col = col.reshape(-1, self.pool_h*self.pool_w)

        arg_max = np.argmax(col, axis=1)
        out = np.max(col, axis=1)  # 行
        out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)

        self.x = x
        self.arg_max = arg_max

        return out

    def backward(self, dout):
        dout = dout.transpose(0, 2, 3, 1)
        
        pool_size = self.pool_h * self.pool_w
        dmax = np.zeros((dout.size, pool_size))
        dmax[np.arange(self.arg_max.size), self.arg_max.flatten()] = dout.flatten()
        dmax = dmax.reshape(dout.shape + (pool_size,)) 
        
        dcol = dmax.reshape(dmax.shape[0] * dmax.shape[1] * dmax.shape[2], -1)
        dx = col2im(dcol, self.x.shape, self.pool_h, self.pool_w, self.stride, self.pad)  # im2col函数的逆操作
        
        return dx

池化层的实现按下面三个阶段进行:

  • 展开输入数据
  • 求各行的最大值
  • 转换为合适的输出大小

每天学习一点点,每天进步一点点。

相关文章

  • CS231n 卷积神经网络: 架构, 卷积/池化层(上)

    卷积神经网络: 架构, 卷积/池化层(上) 卷积神经网络: 架构, 卷积/池化层(上) 卷积神经网络(CNNs/C...

  • CS231n 卷积神经网络: 架构, 卷积/池化层(下)

    卷积神经网络: 架构, 卷积/池化层(下) 卷积神经网络: 架构, 卷积/池化层(下)2.CNNs中的各种层(接上...

  • 卷积神经网络

    参考博客: 卷积神经网络_(1)卷积层和池化层学习 - outthinker - 博客园 卷积神经网络(CNN)模...

  • 卷积神经网络

    卷积神经网络 卷积神经网络2 池化层 激活层 全连接层 过拟合

  • Pooling 小结

    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结...

  • 深度学习入门

    深度学习 主要内容: 什么是深度学习 卷积神经网络的基本流程a. 卷积b. ReLUc. 池化d. 全连接 实验:...

  • 卷积神经网络的组件

    卷积神经网络的组件包括输入层,卷积层,激活层,池化层,全连接层。 输入层 输入层的作用是把输入数据送入卷积神经网络...

  • 深度学习入门--卷积神经网络-池化层

    池化是一种缩小空间大小的运算,池化有Max池化和Averae池化两种。Max池化是取出目标区域的最大值;Avera...

  • tensorflow之深度学习-卷积神经网络

    卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)...

  • 再战机器学习—卷积神经网络

    卷积神经网络 卷积神经网络可能是离我们最近的神经网络,遍布在计算机视觉应用。通常卷积神经网络是由卷积层、池化层和全...

网友评论

    本文标题:深度学习入门--卷积神经网络-池化层

    本文链接:https://www.haomeiwen.com/subject/lssmgqtx.html