深度学习之Pytorch(二)卷积神经网络基础

1.1 卷积神经网络概述

  • 不同于一般的全连接神经网络,卷积神经网络是一个 3D 容量的神经元,神经元是以三个维度来排列的:宽度、高度 和深度。
  • 卷积神经网络中的主要层结构有三个:卷积层、池化层和全连接层。卷积层和全连接层拥有参数(通过梯度下降法更新),而激活层和池化层不含参数。

 

1.2 卷积层

  • 每个滤波器在空间上(宽度和高度) 都比较小,但是深度和输入数据的深度保持一致
  • 每个卷积层上,会有一整个集合的滤波器,比如 5 个,这样就会形成 5 张二维的 、不同的激活图,将这些激活图在深度方向上层叠起来就形成了卷积层的输出。
图1  通过滤波器后,图片由3通道压成1通道
深度学习之Pytorch(二)卷积神经网络基础_第1张图片 此图为28个通道
  • 感受野指的是一个特定的CNN特征(特征图上的某个点)在原始输入空间所受影响的区域。一个感受野可以用中心位置(center location)大小(size)来表征。感受野中的每个像素值(pixel)并不是同等重要。一个像素点越接近感受野中心,它对输出特征的计算所起作用越大。
深度学习之Pytorch(二)卷积神经网络基础_第2张图片 感受野示例

具体补充:https://iphysresearch.github.io/posts/receptive_field.html

 

超参数:在开始学习过程之前设置值的参数

  • 滤波器数量:每种滤波器就是在输入数据中寻找一种特征
  • 滤波器空间尺寸(常为3)
  • 滑动滤波器的指定步长(常为1)
  • 边界填充数量(0填充)(常为1)
  • μ动量因子,控制动量信息对整体梯度更新的影响程度,一般取值0.5, 0.9, 0.99

计算

W 表示输入的数据宽/高 , D表示输入数据的深度

F 表示卷积层中神经元的感受野尺寸(滤波器尺寸),S表示步长, P 表示边界填充的数量

  • 输出宽/高的尺寸公式:

深度学习之Pytorch(二)卷积神经网络基础_第3张图片

  • 输出深度:滤波器数量K
  • 每个滤波器包含的权重数目为,卷积层共有个权重(即图1 的3×3×3×5)和个偏置

 

1.3 池化层

  • 池化层,其作用是逐渐降低数据体的空间尺寸。减少网络中参数的数量,减少计算资源耗费, 同时有效地控制过拟合。
  • 池化层之所以有放,是因为图片特征具有不变性,也就是通过下采样不会丢失图片拥有的特征
  • 最常用的池化层形式是尺寸为 2 x 2 的窗口,滑动步长为 2 ,对图像进行下采样, 将其中 75% 的激活信息都丢掉

超参数:空间大小 F 和滑动步长 S

计算:

W 表示输入的数据宽/高 , D表示输入数据的深度

  • 输出数据宽/高: 
  • 输出数据深:D

池化层中很少引入零填充

一般来说应该谨慎使用大尺寸的池化窗口,以免对网络有破坏性

一般在卷积层之间引入最大池化,在卷积神经网络的最后一层引入平均池化

 

1.4 全连接层

  • 全连接层的每个神经元与前一层所有的神经元全部连接,将特征图中的所有神经元变成了全连接层的样子,也就是将一个 3D 的立方体重新排列。
  • 其中为了防止过拟合会引入 Dropout,在进入全连接层之前,使用全局平均池化能够有效地降低过拟合。

 

1.5 卷积神经网络的基本形式

顺序:卷积层—(批标准化层—)ReLU层—池化层

1、小滤波器的有效性

  • 多个小卷积层与非线性激活层交替的结构,比单一的大卷积层结构更能提取出深层的特征
  • 使用参数也更少

2、网络的尺寸

( 1 ) 输入层:一般而言,输入层的大小应该能够被 2 整除很多次(由于池化层步长一般为2),常用的数字包括 32 , 64 , 96, 224

( 2 ) 卷积层:卷积层应该尽可能使用小尺寸的滤波器,比如 3 x 3 或者 5 x 5。滑动步长取 1。需要对输入数据体进行零填充,以保证卷积层输入和输出的空间尺寸保持一致,并且图像的边缘信息不会过快地损失掉

如果必须要使用更大的滤波器尺寸,比如 7 x 7 ,常用在第一个面对原始图像的卷积层

( 3 ) 池化层:池化层对输入的数据空间维度进行下采样,常使用 2x2 的感受野(最大池化),滑动步长取 2

另一个不常用的是使用 3x3 的感受野,步长设置为2

池化层的感受野大小很少超过 3(避免池化过程过于激烈,造成信息的丢失,造成算法的性能变差)

 

2.1 PyTorch 卷积模块

在卷积神经网络中所有的层结构都可以通过nn这个包调用

卷积模块:

nn.Conv2d ( ),in_channels, out_channels, kernel size, stride, padding,除此之外还有参数 dilation,  groups ,bias

 bias 是一个布尔值,默认 bias=True ,表示使用偏置; groups 表示输出数据体深度上和输入数据体深度上的联系,默认 groups=1,也就是所有的输出和输入都是相关联的,如果 groups=2 ,这表示输入的深度被分割成两份,输出的深度也被分割成两份

池化模块:

nn.MaxPool2d (),kernel_size、stride、padding 、dilation 、return_indices(是否返回最大值所处的下标,默认 False ) 、ceil_mode

nn.AvgPool2d() ,多个参数 count_include_pad,表示计算均值时是否包含零填充,默认True

 

2.2 构造简单的多层卷积神经网络

深度学习之Pytorch(二)卷积神经网络基础_第4张图片

可以在建立卷积层和池化层时计算数据体大小,在代码旁边注释,不容易出错

 

2.3 提取层结构

nn.Module 的几个属性

children () ,返回下一级模块的迭代器,返回 self.layer1,self.layer2, self.layer3 ,以及 self.layer4.不返回它们内部的东西modules () ,返回模型中所有模块的迭代器,能够访问到最内层,比如self.layer1. conv1这个模块

named children ()以及 named modules () ,这两个不仅返回模块的迭代器,还返问网络层的名字

 

2.4 提取参数及自定义初始化

nn.Module 里有两个关于参数的属性

分别是 named_parameters ():给出网络层的名字和参数       parameters ():给出一个网络的全部参数

权重初始化:

权重是一个 Variable ,只需要取出其 data 属性,对它进行处理就可以了

深度学习之Pytorch(二)卷积神经网络基础_第5张图片

 

 

 

你可能感兴趣的:(专业知识)