卷积神经网络(CNN)

内容

卷积神经网络概述

全零填充(padding)

卷积层

池化层

批标准化(BN)

Dropout

总结

Lenet-5案例说明CNN结构

卷积神经网络概述

在讲解CNN之前首先需要了解的是全连接NN,他是每一个神经元与前后相邻的层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。

卷积神经网络(CNN)

上图中只是一个28*28的黑白图像, 参数就有近40w的参数量需要去训练。如果换成生活中高分辨率的彩色图像,那么待优化的参数就更多,就容易导致过拟合现象。

为了避免过拟合的发生,我们在实际应用中不会直接对图像进行全连接神经网络。首先对原始图像进行特征提取,然后将提取的特征输入全连接网络。

卷积神经网络(CNN)

卷积是提取图像特征的有效方法。一般采用方形卷积核遍历图片上的每个点,在图片区域内,每个对应的像素值,乘以卷积核中对应的权重,求和。加上偏见。

卷积神经网络(CNN)

卷积之后图像由原来的5*5*1的图像变为3*3*1的图像。

卷积之后输出图片的边长=(输入图片边长-卷积核长+1)/步长

此图就是:(5-3+1)/1=3

全零填充(padding)

使输出图像仍保持原始图像大小。

卷积神经网络(CNN)

使用padding的效果:卷积神经网络(CNN)

卷积层

卷积神经网络(CNN)

TF中keras也很给了不同的描述:

tf.keras.layers.Con2D(
    filters = 卷积核的个数
    kernel_size=卷积核尺寸
    strides=滑动步长
    padding = "same" or "valid"
    activation="relu" or "sigmoid" or "tanh" or "softmax"   # 如果卷积有批标准化BN操作,这儿不写激活函数。
    input_shape=(高、宽,通道数)  # 输入特征图维度,可省略
)

下面以一个例子来说明三层的面积计算。每一层都使用一种表现形式,大家可以根据自己的喜好选择一种:

model = tf.keras.models.Sequential([
    Conv2D(6,5, padding='valid', activation='sigmoid'),
    MaxPool2D(2,2),
    Conv2D(6,(5,5),padding='valid', activation='sigmoid'),
    Maxpool2D(2,(2,2)),
    Conv2D(filters=6,kernel_size=(5,5),padding='valid', activation='sigmoid'),
    Maxpool2D(pool_size=(2,2),strides=2),
    Flatten(),
    Dense(10,actvation='softmax')

])

池化层

卷积得到的特征参数数量还是巨大的,池化层主要用来减少特征数量,池化主要包括最大池化和均值池化。最大池化可以提取图像的纹理,平均池化可以保留背景特征。

卷积神经网络(CNN)

卷积神经网络(CNN)

批标准化(BN)

由于神经网络对0附近的数据更敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的情况,标准化可以使数据符合以0为均值1为标准差的分布,把便宜的特征数据重新拉回到1的附近。

批标准化:是对一小批数据(batch),做标准化处理。使得数据回归标准分布。常用在卷积操作和激活操作之间。

卷积神经网络(CNN)

BN操作将原本偏离的特征数据,重新来拉回到零均值,使得进入激活函数的输就分布在激活函数线性区域。使得输入数据的微小变化更加明显地提现到激活函数地输出,提升了激活函数对输入数据的区分力。但是这种简单的数据标准化使得特征数据完全满足标准正态分布集中在激活函数中心的线性区域,使得激活函数丧失了非线性特性,因此在BN操作中为每个卷积核引入了两个可训练的参数缩放因子和偏移因子。反向传播时,缩放因子和偏移因子会与其他待训练参数异同被训练优化。使得标准分布后的特征数据通过缩放因子和偏移因子优化了特征数据分布的宽窄和偏移量。保证了网络的非线性表达力。如下所示:

卷积神经网络(CNN)

BN层位于卷积之前,激活之后。

卷积神经网络(CNN)

TF提供了批标准化的函数:

tf.keras.layers.BatchNormalization()

它是这样写的:

model=tf.keras.models.Sequential([
    Conv2D(filter=6,kernel_size=(5,5),padding='same'),
    BatchNormalization(),
    Activation('relu'),
    MaxPool2D(pool_size=(2,2),strides=2,padding='same')
    Dropout(0.2)
])

Dropout

在神经网络的训练过程中,为了减少过多的参数,常使用Dropout的方法。将一部分神经元按照一定概率从神经网络中暂时舍弃,使用时被舍弃的神经元恢复链接。(这种舍弃是临时性的,只在训练时舍去,在使用时会把所有的神经元恢复到神经网络中)

卷积神经网络(CNN)

在实际应用中在前向传播构建神经网络中,常常使用Dropout减小过拟合,加快模型的训练速度。Dropout一般会放在全连接网络中,如果在训练参数的过程中,输出=tf.nn.dropout(上层输出,暂时舍弃的概率)。

TF中keras提供了如下函数:

model=tf.keras.models.Sequential([
    Conv2D(filter=6,kernel_size=(5,5),padding='same'),
    BatchNormalization(),
    Activation('relu'),
    MaxPool2D(pool_size=(2,2),strides=2,padding='same')
    Dropout(0.2)
])

总结

其实CNN就是借助卷积核(kernel)对图像的特征进行提取,然后送入到全连接网络。

CNN模型的主要模块:

卷积神经网络(CNN)

CNN模型的发展历史:

卷积神经网络(CNN)

Lenet-5案例说明CNN结构

卷积神经网络(CNN)

上图中5*5*16就是卷积提取的特征,然后喂入全连接网络

针对28*28的图像,修改网络如下:

卷积神经网络(CNN)上图中7*7*64就是卷积提取的特征,然后喂入全连接网络

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月29日 下午6:20
下一篇 2022年3月31日

相关推荐