卷积神经网络各层的作用以及API的设计
对于很多小伙伴来说,每次接受一个新名称都是一种进步与挑战,而我认为学习是一个0与1的过程,到达1也许需要经历千辛万苦,但是当你到达1后,这种喜悦会让你认为过程的艰苦是值得的。这篇文章主要是对卷积神经网络中重要的四个层面的介绍,我也尽量会以最通俗的语言去进行介绍,希望您可以有收获。
1、神经网络的层次结构
神经网络包括三大层:输入层,隐藏层,输出层。
其中最为重要的是隐藏层,它包括四大部分:
卷积层
激励层
池化层
全连接层
接下来我将对这四层进行讲解
2、卷积层
2.1 卷积层的作用
通过卷积核在原始图像上平移来提取特征。就好比人观察图片,通过上下扫描图片,提取想要的信息。
2.2 卷积层相关概念的介绍
我们先来了解几个概念:图片大小,卷积核大小,偏置项,步长,零填充
图片大小 [ 长*宽*通道数 ]:图片分为黑白图片和彩色图片。
对于黑白图片它的大小 = 长 * 宽 *1 (通道数为1)
对与RGB彩色图片的大小 = 长 * 宽 * 3(通道数为3)
卷积核的大小:我们一般习惯用1 * 1 3 * 3 5 * 5像素,作为我们的卷积核,卷积核也可以理解为人工神经网络中的权重大小。(卷积核一般随机生成,包含[0,1,-1]的矩阵)
偏置项:因为在进行图像线性处理的,需要对图像进分割,偏置项的作用使分割的线性图像可以不过原点。偏置项的作用
步长:卷积核需要对图像像素进行计算,每次计算后所需要移动的像素大小。
零填充,因为卷积核按照相应步长移动,卷积核可能会超出图片的范围,因此可以在图片外围进行零填充,保证每一个卷积核都有相应的值与之计算。
2.3 卷积层输出图片的生成

上图给出的是单通道如何生成输出图像
输入图片大小为5 * 5 * 1
卷积核大小为3 * 3
步长为1
偏置项为0
无零填充
得到的生成的输出图像大小为3 * 3 * 1
可以看出来输入图像与卷积核的计算是一一对应的关系。


上面张图片展示的是三通道输入图像如何生成输出图像
输入图片大小为5 * 5 * 1
卷积核大小为3 * 3
步长为2
偏置项为1
有零填充,大小为1
这里的蓝色矩阵输入的图像,粉色矩阵就是卷积核。这里表示了有两个神经元(w0,w1)。绿色矩阵就是经过卷积运算后的输出矩阵。
下面给出动态图

2.4 生成图片大小的计算
输入体积大小为H1*W1*D1
四个超参数:
卷积核的数量K
卷积核大小F(F表示卷积核的边长)
步长S
零填充大小P
输出体积大小H2*W2*D2
H2=(H1-F+2P)/S+1
W2=(W1-F+2P)/S+1
D2=K
给出一道面试例题

(*可以考虑计算验证一下2.3中三通道图像,输入图片大小为5*5*3,卷积核为3*3,卷积核的数量为2,生成图片大小为3*3*3)
2.5 卷积层API的设计
tf.nn.conv2d(input,fliter,strides=,padding=,name=None)
各个参数的介绍
input: #输入图片大小
要求形状[batch,height,width,channel] #(长宽高,和图片数)
类型为float32,64
filter: #卷积核数目
weigths #(权重)(核大小)
变量initial_value=random_normal(shape=[F,F,3(RGB图片)或1(黑白图片),K])
(字母的意思参考2.4中给定字母的介绍)
strides: #步长
[1,strides,strides,1]
padding:’SAME’ #零填充大小
“SAME”:越过边缘取样
“VALID”:不越过边缘取样
3、激活层
3.1 激活层的作用
激活层最重要的便是激活函数,它的主要作用是加入非线性因素的,将特征映射到高维的非线性区间进行解释,解决线性模型所不能解决的问题。
3.2 激活函数
首先我们先了解两个激活函数:sigmoid 函数和 ReLU 函数。
sigmoid函数我们在人工神经网络中我们将他作为阈值函数,将变量映射到0和1之间
sigmoid的函数表达式为

图像为

因为卷积神经网络需要进行大量的像素提取计算,而sigmoid求导后,结果复杂,计算量也相当的大。同时随着图形的增长梯度会逐渐消失,并且输入的范围大致为[-6,6]。因此我们引入新的激活函数 ReLU 函数
ReLU函数的表达式和图形如下

ReLU函数的优点主要有三点
1、计算速度快
2、解决了梯度消失
3、图象没有负像素
有了激活函数,我们就来看下API 的设计
3.3 激活层API的设计
卷积层的API利用tensorflow非常简单
tf.nn.relu(features)
各参数的介绍
features #卷积后的偏置结果
4、池化层
4.1 池化层的作用
池化层主要是利用图形各像素之间的联系,压缩数据和参数的量,减少过拟合。池化层所做的工作简言之就是将图片压缩。
这里再展开叙述池化层的具体作用。
1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
3. 在一定程度上防止过拟合,更方便优化。

池化方法一般包括:最大池化和平均池化,而最为普遍的是最大池化。找到池化窗口中最大的数作为输出值。

4.2 池化层API的设计
tf.nn.max_pool(value,ksize=,strides=,padding)
各参数的介绍
value:4-D Tensor形状(batch,height,width,channels)
channel:卷积核的数量
ksize:池化窗口[1,ksize,ksize,1]
strides:步长大小[1,strides,strides,1]
padding:”SAME”,”VALID”
4.3 池化层的面试题
(参考卷积层的计算)

5、全连接层
前面的卷积和池化相当于在做特征工程,最后的全连接层起到了“分类器”的作用。
由于能力有限,参考网上一些博客和视频,根据自己的理解和学习进行的编写,这篇文章有助于大家理解卷积神经网络四大层次。同时后面提供的哔哩哔哩链接,有助于深度学习的初学者进行学习。最后感激您的阅读,有问题也希望您能够指出,我们一同进步。
参考文献:
网友评论