卷积神经网络

全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出是预测的结果。

由于一张图片通常有很多待优化的参数,如果待优化的参数很多,就会出现过拟合。所以在实际的应用中,会对原始的图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。


卷积Convolutional

    卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。


input是5*5*1的灰度图片,1表示单通道,5*5表示分辨率,共有5行5列个灰度值。若用3*3*1的卷积核对此5*5*1的灰度图片进行卷积,b=1为偏置项,output则为卷积的结果:(-1)*1+0*0+1*2+(-1)*5+0*4+1*2+(-1)*3+0*4+1*5+1=1

    输出图片的边长 = (输入图片边长-卷积核长+1)/步长,此图为:(5-3+1)/1=3,输出图片是3*3的分辨率,用了1个卷积核,输出深度为1,最后输出的是3*3*1的图片。

全零填充Padding

    有时会在输入图片周围进行全零填充,这样可以保证输出图片的尺寸和输入图片一致。


前面5*5*1的图片周围进行全零填充,可使得输出图片仍保持5*5*1的维度。这个全零填充的过程叫做padding。

输出数据体的尺寸=(W-F+2P)/S + 1

W:输出数据体尺寸,F:卷积层中神经元感知域,S:步长,P:零填充的数量。

如果输入量是32*32*3,核是5*5*3,不用全零填充,输出的是(32-5+1)/1 = 28,如果要让输入量保持在32*32*3,可以对该层加一个大小为2的零填充。可以根据需求计算出需要填充几层零。32 = (32-5+2p)/1 +1,计算出p=2,即需填充2层零。



上一行公式是使用padding的输出图片边长,下一行是不使用padding的输出图片边长。


函数中要给出四个信息:对输入图片的描述、对卷积核的描述、对卷积核滑动步长的描述以及是否使用padding.

1)对输入图片的描述:batch给出一次喂入多少张图片,每张图片的分辨率大小,比如5行5列,以及这些图片包含几个通道的信息,如果是灰度图则为单通道,参数写1,如果彩色图则为红绿蓝单通道,参数写3.

2)对卷积核的描述:要给出卷积核的行分辨率和列分辨率、通道数以及用了几个卷积核。比如上图表示行列分辨率分别为3行3列且是1通道的,一共有16个这样的卷积核,卷积核的通道数由输入图片的通道数决定,且两个的通道数必须相等。

3)对卷积核滑动步长的描述:第二参数表示行滑动步长,第三个参数表示列滑动步长。第一个1和最后一个1都是固定的。

4)是否使用padding:用的是VALID.

    多数情况下,输入的图片是RGB三个颜色组成的彩色图,输入的图片包含了红、绿、蓝三层数据,卷积核的深度应该等于输入图片的通道数,所以使用3*3*3的卷积核,最后一个3表示匹配输入图像的3个通道,这样这个卷积核有三层,每层会随机生成9个待优化的参数,一共有27个待优化参数w和一个偏置b.


    对于彩色图,按层分解开,可以直观表示为上面这张图,三个颜色分量:红色、绿色、蓝色分量。

    卷积计算方法和单层卷积核相似,卷积核为了匹配红绿蓝三个颜色,把三层的卷积核套在三层的彩色图片上,重合的27个像素进行对应点的乘加运算,最后的结果再加上偏置项b,求得输出图片中的一个值。

    这个5*5*3的输入图片加了全零填充,使用3*3*3的卷积核,所有27个点与对应的待优化参数相乘,乘积求和再加上偏置b得到输入图片中的一个值6.

    针对上面这幅彩色图片,用conv2d函数实现可以表示为:

    一次输入batch张图片,输入图片的分辨率是5*5,是3通道数,卷积核是3*3*3,一共有16个卷积核,这样输出的深度就是16,核的横向步长为1,纵向步长为1,padding选择了same,保证输出的是5*5分辨率。由于一共用了16个卷积核,所以输出图片是5*5*16。

池化Pooling

    Tensorflow给出了计算池化的函数。最大的池化用tf.nn.max_pool函数,平均池化用tf.nn.avg_pool函数

此文章是参考mooc,tensorflow实践


1)对输入的描述:给出一次输入batch张图片、行列分辨率、输入通道的个数。

2)对池化核的描述:只描述行分辨率和列分辨率,第一个和最后一个参数固定是1.

3)对池化核滑动步长的描述:只描述横向滑动步长和纵向步长,第一个和最后一个参数固定是1.

4)是否使用padding:padding可以是使用零填充的SAME或者不使用零填充的VALID.


舍弃Dropout

在神经网络的训练过程中,为了减少过多参数常使用dropout的方法,将一部分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时的,仅在训练时舍弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。比如下图,在训练时一些神经元不参加神经网络计算了。Dropout可以有效减少过拟合。


此文章参考的是 mooc的

人工智能实践:Tensorflow笔记

https://www.icourse163.org/learn/PKU-1002536002

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页