1 引言
(1)全连接网络NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出是预测的结果。
待优化的参数过多,容易导致模型过拟合
实际应用中会先对原始图像进行特征提取,再把提取到的特征喂给全连接网络。
2 卷积的概念
卷积可被认为是一种有效提取图像特征的方法
一般会用一个正方形卷积核,遍历图片上的每个点,图片区域内,相对应的每一个像素点,乘以卷积核内相对对应点的权重,求和,再加上偏置。
输出图片边长 = (输入图片边长-卷积核长 +1)/步长
此图中:(5-3+1)/ 1 =3
3 数据周围全零填充padding
有时候为了保证输入图片和输入图片一致,需要对输入的数据进行全零填充。
计算公式
在TensorFlow框架中,用参数padding =’SAME’或padding = ‘VALID’ 表示
(3)TensorFlow计算卷积
tf.nn.conv2d(输入描述,eg,[batch,5,5,1]#5 5表示每张图片的分辨率大小5行5列,1表示通道数,如果是灰度图示1,如果是彩色图,有红绿蓝三种颜色,就是3通道 卷积核描述, eg.[3,3,1,16] 核滑动步长,eg.[1,1,1,1] padding= ‘VALID’ )
彩色图的卷积如下,图片包含了三个颜色分为三个信息,分别对它们进行卷积。
彩色图片的卷积实现如下
tf.nn.conv2d(输入描述,eg,[batch,5,5,3]#5 5表示每张图片的分辨率大小5行5列,1表示通道数,如果是灰度图示1,如果是彩色图,有红绿蓝三种颜色,就是3通道 卷积核描述, eg.[3,3,3,16]
核滑动步长,eg.[1,1,1,1]
padding= ‘VALID’
)
4 池化
池化用于减少特征数量;最大值池化可提取图片纹理,均值池化可保留背景特征
TensorFlow实现
pool =tf.nn.max_pool(输入描述,eg.[batch,28,28,6])
pool = tf.nn.avg_pool
5 舍弃Dropout
在神经网络训练的过程汇总,将一部分神经元按照一定概率从神经网络中暂时舍弃,使用时被舍弃的神经元恢复连接
TensorFlow实现
tf.nn.dropout(上层输出,暂时舍弃的概率)
if train: 输出 = tf.nn.dropout(上层输出,暂时舍弃的概率)
6 卷积NN
借助卷积核(kernel)提取特征后,送入全连接网络
CNN的主要模块如下
CNN模型非发展历史
Lenet5 —>AlexNet —>VGGNet —>…—>GooleNet—>ResNet