飞桨学习笔记之卷积神经 络基础

  • 1 卷积
    • 1.1 卷积计算
    • 1.2 填充
    • 1.3 步幅
    • 1.4 感受野
    • 1.5 多输入通道、多输出通道和批量操作
    • 1.6 飞桨卷积API
  • 2 池化
  • 3 ReLU激活函数
  • 4 批归一化
  • 5 丢弃法

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。
卷积核代表了对像素点的空间邻域内某种特征模式的提取。比如,有些卷积核提取物体边缘特征,有些卷积核提取物体拐角处的特征,图像上不同区域共享同一个卷积核。当输入图片大小不一样时,仍然可以使用同一个卷积核进行操作。

1 卷积

1.1 卷积计算

1.2 填充

卷积输出特征图的尺寸计算方法如下:

1.3 步幅

当高和宽方向的步幅分别为 s_h 和 s_w 时,输出特征图尺寸的计算公式是:

1.4 感受野

1.5 多输入通道、多输出通道和批量操作

例如:对于彩色图片有 RGB 三个通道,需要处理多输入通道的场景。
多输入通道计算过程:

通常将卷积核的输出通道数叫做卷积核的个数。
多输出通道计算过程:

1.6 飞桨卷积API

paddle.fluid.dygraph.Conv2D 常用参数:

  1. num_channels (int) – 输入图像的通道数。
  2. num_fliters (int) – 卷积核的个数,和输出特征图通道数相同。
  3. filter_size(int|tuple) – 卷积核大小,可以是整数,比如3,表示卷积核的高和宽均为3 ;或者是两个整数的list,例如[3,2],表示卷积核的高为3,宽为2。
  4. stride(int|tuple) – 步幅,可以是整数,默认值为1;或者是两个整数的list,例如[3,2],表示垂直滑动步幅为3,水平滑动步幅为2。
  5. padding(int|tuple) – 填充大小,可以是整数,比如1;或者是两个整数的list,例如[2,1],表示竖直边界填充大小为2,水平边界填充大小为1。
  6. act(str)- 应用于输出上的激活函数,如Tanh、Softmax、Sigmoid,Relu等,默认值为None。

权重参数 w 的维度 [num_filters,Cin,filter_size_h,filter_size_w],偏置参数 b 的维度是 [num_filters]。

2 池化

池化是使用某一位置的相邻输出的总体统计特征代替 络在该位置的输出,其好处是当输入数据做出少量平移时,经过池化函数后的大多数输出还能保持不变。

3 ReLU激活函数

Sigmoid 函数在反向传播过程中,容易造成梯度的衰减。Sigmoid 激活函数定义如下:

4 批归一化

批归一化的目的是对神经 络中间层的输出进行标准化处理,使得中间层的输出更加稳定。它的优点:

  1. 使学习快速进行(能够使用较大的学习率)。
  2. 降低模型对初始值的敏感性。
  3. 从一定程度上抑制过拟合。

通常我们会对神经 络的数据进行标准化处理,处理后的样本数据集满足均值为0,方差为1的统计分布,这是因为当输入数据的分布比较固定时,有利于算法的稳定和收敛。对于深度神经 络来说,由于参数是不断更新的,即使输入数据已经做过标准化处理,但是对于比较靠后的那些层,其接收到的输入仍然是剧烈变化的,通常会导致数值不稳定,模型很难收敛。

如果强行限制输出层的分布是标准化的,可能会导致某些特征模式的丢失,所以在标准化之后,Batch Normalization 会紧接着对数据做缩放和平移。

5 丢弃法

丢弃法(Dropout)是深度学习中一种常用的抑制过拟合的方法,其做法是在神经 络学习过程中,随机删除一部分神经元。训练时,随机选出一部分神经元,将其输出设置为0,这些神经元将不对外传递信 。
训练时由于部分神经元被随机丢弃了,输出数据的总大小会变小。比如:计算其 L1 范数会比不使用 Dropout 时变小,但是预测时却没有丢弃神经元,这将导致训练和预测时数据的分布不一样。为了解决这个问题,飞桨支持如下两种方法:

  1. downgrade_in_infer
    训练时以比例 r 随机丢弃一部分神经元,不向后传递它们的信 ;预测时向后传递所有神经元的信 ,但是将每个神经元上的数值乘以 (1?r)。
  2. upscale_in_train
    训练时以比例 r 随机丢弃一部分神经元,但是将那些被保留的神经元上的数值除以 (1?r);预测时向后传递所有神经元的信 ,不做任何处理。

paddle.fluid.dygraph.Dropout API包含的主要参数如下:

  1. p (float32,可选) – 输入单元的丢弃概率,即输入单元设置为0的概率。默认值:0.5,该参数对元素的丢弃概率是针对于每一个元素而言,而不是对所有的元素而言。举例说,假设矩阵内有12个数字,经过概率为0.5的 dropout 未必一定有6个零。
  2. seed (int,可选) – 整型数据,用于创建随机种子。如果该参数设为 None,则使用随机种子。注:如果给定一个整型种子,始终丢弃相同的输出单元。训练过程中勿用固定不变的种子。默认值:None。
  3. is_test(bool) – 标记是否是测试阶段。此标志仅对静态图模式有效。对于动态图模式,请使用 eval() 接口。默认:False。
  4. dropout_implementation(str) – 丢弃法的实现方式,有 ’downgrade_in_infer’ 和 ’upscale_in_train’ 两种,默认是 ’downgrade_in_infer’。(不同框架对于 dropout 的默认处理方式可能不同。)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月11日
下一篇 2020年10月11日

相关推荐