2.4 多通道图片求卷积
多数情况下,输入的图片是RGB三个颜色组成的彩色图,输入的图片包含了红、绿、蓝三层数据,卷积核的深度应该等于输入图片的通道数,所以使用3x3x3的卷积核,最后一个3表示匹配输入图像的3个通道,这样这个卷积核有三层,每层会随机生成9个待优化的参数,一共有27个待优化参数w和一个偏置b。
卷积计算方法和单层卷积核相似,卷积核为了匹配RGB三个颜色,把三层的卷积核套在三层的彩色图片上,重合的27个像素进行对应点的乘加运算,最后的结果再加上偏置项b,求得输出图片中的一个值。
如5x5x3的输入图片加了1圈全零填充,使用3x3x3的卷积核,所有27个点与对应的待优化参数相乘,乘积求和再加上偏置b得到输出图片中的一个值。
2.5 池化 Polling
TensorFlow给出了计算池化的函数。最大池化用tf.nn.max_pool函数,平均用池化用tf.nn.avg_pool函数。
pool=tf.nn.max_pool(输入,池化核,核步长,padding='SAME')
输入:eg.[batch,28,28,6],给出一次输入batch张图片、行列分辨率、输入通道的个数。
池化核:eg.[1,2,2,1],只描述行分辨率和列分辨率,第一个和最后一个参数固定是1
核步长:eg.[1,2,2,1],池化核滑动步长,只描述横向滑动步长和纵向滑动步长,第一个和最后一个参数固定是1
padding :是否使用零填充padding,可以是使用SAME或不使用充VALID
2.6 舍弃 Dropout
在神经网络训练过程中,为了减少过多参数常使用 dropout 的方法,将一部分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。
在实际应用中,常常在前向传播构建神经网络时使用dropout来减小过拟合以及加快模型训练速度,dropout一般会放到全连接网络中。
TensorFlow提供的dropout函数:tf.nn.dropout(上层输出,暂时舍弃的神经元的概率)
如:在训练参数的过程中,输出=tf.nn.dropout(上层输出,舍弃概率),这样就有指定概率的神经元被随机置零,置零的神经元不参加当前轮的参数优化。
2.7 卷积神经网络 CNN
卷积神经网络可以认为由两部分组成,一部分是对输入图片进行特征提取,另一部分就是全连接网络,只不过喂入全连接网络的不再是原始图片,而是经过若干次卷积、激活和池化后的特征信息。
卷积神经网络从诞生到现在,已经出现了许多经典网络结构,比如Lenet-5、Alenet、VGGNet、GoogleNet和ResNet等。每一种网络结构都是以卷积、激活、池化、全连接这四种操作为基础进行扩展。
LeNet-5是最早出现的卷积神经网络,它有效解决了手写数字的识别问题。