卷积神经网络
本讲目标
用CNN实现离散数据的分类(以图像分类为例)
- 卷积计算过程
- 感受野
- 全零填充(Padding)
- TF描述卷积计算层
- 批标准化(Batch Normalization, BN)
- 池化(Pooling)
- 舍弃(Dropout)
- 卷积神经网络
- cifar10数据集
- 卷积神经网络搭建示例
- 实现LeNet、AlexNet、VGGNet、InceptionNet、ResNet五个经典神经网络
1、卷积计算过程
全连接神经网络:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。
卷积:
- 卷积计算可认为是一种有效提取图像特征的方法
- 一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项的带输出特征的一个像素点。
- 必须让卷积核的深度与输入特征图的深度一致,卷积核的通道数与输入特征图的通道数一致。
输入特征图的深度(channel数),决定了当前层卷积核的深度;每个卷积核在卷积计算后,会得到一张输出特征图,当前层用了几个卷积核,就会有几张输出特征图,所以,当前卷积核的个数,决定了当前输出特征图的深度。
单通道输入特征图的卷积计算
三通道输入特征图的卷积计算过程
2、感受野
卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。
3、全零填充
有时会希望输出特征图的尺寸保持不变,这个时候可以使用全零填充。
卷积输出特征图维度的计算公式:
- 使用全零填充时,输出特征图边长: 输 入 特 征 图 边 长 步 长 \frac{输入特征图边长}{步长} 步长输入特征图边长(向上取整)
在TF中用padding = ‘SAME’ 表示使用全零填充 - 不使用全零填充时,输出特征图边长: 输 入 特 征 图 边 长 − 核 长 + 1 步 长 \frac{输入特征图边长-核长+1}{步长} 步长输入特征图边长−核长+1(向上取整)
在TF中用padding = 'VALID’表示不使用全零填充
4、TF描述卷积计算层
tf.keras.layers.Conv2D(
filters = 卷积核个数,
kernel_size = 卷积核尺寸, # 正方形写核长整数,或(核高h, 核宽w)
strides = 滑动步长, # 横纵向写相同步长整数,或(纵向步长h,横向步长w),默认1
padding = "same" or "valid", # 默认valid
activation = "relu" or "sigmoid" or "tanh" or "sofmax", # 如有BN此处不写
input_shape = (高, 宽, 通道数) # 输入特征图维度,可省略
)
5、批标准化
标准化:使数据符合0均值,1为标准差的分布
批标准化:对一小批数据(batch),做标准化处理。
通过上面的简单处理,会使数据完全符合标准正态分布,使激活函数丧失了非线性特性,因此为每个卷积核引入了两个可训练参数,缩放因子γ和偏移因子β。