欢迎光临散文网 会员登陆 & 注册

07 深度学习之卷积神经网络

2020-03-24 00:40 作者:荟呀荟学习  | 我要投稿

1.整体结构

  • 全连接

    相邻层的所有神经元之间都有连接

  • 基于全连接层(Affine层)的网络

  • 基于CNN的网络

CNN中新出现了卷积层(Convolution层)和池化层(Pooling层)

        CNN的层的连接顺序是“Convolution - ReLU -(Pooling)”(Pooling层有时会被省略)。这可以理解为之前的“Affi ne - ReLU”连接被替换成了“Convolution - ReLU -(Pooling)”连接。

        靠近输出的层中使用了之前的“Affine - ReLU”组合。此外,最后的输出层中使用了之前的“Affi ne - Softmax”组合。

2.卷积层

  • 目的

    解决全连接层存在的问题,数据的形状被“忽视”了。

  • 特征图

    CNN 中,称卷积层的输入输出数据为特征图。

  • 卷积运算

    卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。

  • 步骤:

    (1)无偏置

将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和(有时将这个计算称为乘积累加运算)。然后,将这个结果保存到输出的对应位置。以一定间隔滑动滤波器的窗口并应用。

        (2)有偏置

向应用了滤波器的数据加上了偏置,偏置通常只有 1个(1×1)
这个值会被加到应用了滤波器的所有元素上。
  • 填充

    (1)填充方法

    在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如 0等)。对大小为 (4, 4)的输入数据应用了幅度为 1的填充。“幅度为 1的填充”是指用幅度为 1像素的 0填充周围。

    (2)填充图像

        (3)填充目的

       使用填充主要是为了调整输出的大小,保证卷积运算就在保持空间大小不变的情况下将数据传给下一层。

  • 步幅

    应用滤波器的位置间隔称为步幅。增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。

步幅为2的卷积运算
  • 如何计算输出大小

假设输入大小为 (H, W),滤波器大小为 (FH, FW),输出大小为(OH, OW),填充为 P,步幅为 S。
  • 3维数据的卷积运算

    图像是3维数据,除了高、长方向之外,还需要处理通道方向。通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。

对3维数据进行卷积运算
对3维数据进行卷积运算的计算顺序

        在3维数据的卷积运算中,输入数据和滤波器的通道数要设为相同的值。

  • 结合方块思考卷积运算

    (1)输出一张特征图

在这个例子中,数据输出是 1张特征图,即通道数为 1的特征图

        (2)输出多张特征图

        需要用到多个滤波器(权重)。滤波器的权重数据要按 (output_channel, input_channel, height, width)的顺序书写。比如,通道数为 3、大小为 5 ×5的滤波器有 20个时,可以写成 (20, 3, 5, 5)。

        (3)加入偏置

偏置的形状是 (FN, 1, 1),滤波器的输出结果的形状是 (FN, OH, OW)

        这两个方块相加时,要对滤波器的输出结果 (FN, OH, OW)按通道加上相同的偏置值。另外,不同形状的方块相加时,可以基于 NumPy的广播功能轻松实现。

3.池化层

  • 目的

    池化是缩小高、长方向上的空间的运算。

  • Max池化的处理顺序


        Max池化”是获取最大值的运算.一般来说,池化的窗口大小会和步幅设定成相同的值。比如,3 ×3的窗口的步幅会设为 3,4 ×4的窗口的步幅会设为4。

  • 池化层的特征

    (1)没有要学习的参数

    (2)通道数不发生变化

    (3)对微小的位置变化具有鲁棒性(健壮)

4.卷积层和池化层的实现

  • 基于 im2col 的展开

    (1)原因

    如果老老实实地实现卷积运算,估计要重复好几层的 for语句。这样的实现有点麻烦,而且,NumPy中存在使用 for语句后处理变慢的缺点。因此使用 im2col这个便利的函数进行简单的实现。

    (2)im2col的示意图

对 3维的输入数据应用 im2col后,数据转换为 2维矩阵(正确地讲,是把包含批数量的 4维数据转换成了 2维数据)。im2col会把输入数据展开以适合滤波器(权重).

将滤波器的应用区域从头开始依次横向展开为 1列.使用 im2col展开输入数据后,之后就只需将卷积层的滤波器(权重)纵向展开为 1列,并计算 2个矩阵的乘积即可

卷积运算的滤波器处理的细节
  • 卷积层的实现

    (1)im2col提供的接口

        (2)im2col初始化

        (3)im2col来实现卷积层

滤波器是(FN,C,FH,FW)的4维形状。另外,FN、C、FH、FW分别是Filter
Number(滤波器数量)、Channel、FilterHeight、FilterWidth的缩写.输入数据的四维形状(N,C,H,W).这里通过 reshape(FN,-1)将参数指定为 -1,这是reshape的一个便利的功能。reshape函数会自动计算 -1维度上的元素个数,以使多维数组的元素个数前后一致。比如,(10, 3, 5, 5)形状的数组的元素个数共有 750个,指定 reshape(10,-1)后,就会转换成 (10, 75)形状的数组。forward的实现中,最后会将输出大小转换为合适的形状。
  • 池化层的实现

    (1)对输入数据展开池化的应用区域

        (2)求得池化的应用区域内的最大值

  • CNN 的实现

简单 CNN的网络构成
  • CNN 的可视化

    (1)第 1 层权重的可视化

    学习前的滤波器是随机进行初始化的,所以在黑白的浓淡上没有规律可循,但学习后的滤波器变成了有规律的图像。

通过学习,滤波器被更新成了有规律的滤波器,比如从白到黑渐变的滤波器、含有块状区域(称为 blob)的滤波器等。
有规律的滤波器在“观察”什么,答案就是它在观察边缘(颜色变化的分界线)和斑块(局部的块状区域)等。 比如,左半部分为白色、右半部分为黑色的滤波器的情况下,会对垂直方向上的边缘有响应。

        (2)基于分层结构的信息提取

        如果堆叠了多层卷积层,则随着层次加深,提取的信息也愈加复杂、抽象,这是深度学习中很有意思的一个地方。最开始的层对简单的边缘有响应,接下来的层对纹理有响应,再后面的层对更加复杂的物体部件有响应。也就是说,随着层次加深,神经元从简单的形状向“高级”信息变化。换句话说,就像我们理解东西的“含义”一样,响应的对象在逐渐变化。

  • 具有代表性的 CNN

    (1)LeNet

    (2)AlexNet

07 深度学习之卷积神经网络的评论 (共 条)

分享到微博请遵守国家法律