前馈神经网络(feedforward neural network,FNN),简称前馈网络,是人工神经网络的一种。前馈神经网络采用一种单向多层结构。其中每一层包含若干个神经元。在此种神经网络中,各神经元可以接收前一层神经元的信号,并产生输出到下一层。第0层叫输入层,最后一层叫输出层,其他中间层叫做隐含层(或隐藏层、隐层)。隐层可以是一层。也可以是多层 。 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 。 一个典型的多层前馈神经网络如图所示。
2 组成
2.1 卷积层
在图像处理中,往往把图像表示为像素的向量,比如一一个1000x 1000的图像,可以表示为一个000000的向量。假如神经网络中的隐藏层数目与输入层一样,即也是1000000时,那么输入层到隐藏层的参数数据为1000000 X 1000000=1012,数据量非常巨大,基本无法训练。所以使用神经网络处理图像,必须先减少参数,加快训练速度。卷积层就用来局部感知提取特征,降低输入参数的层。
滤波器( Filter)本质上是该层的神经元,具有加权输入并产生输出值,输入是固定大小的图像样本(如5×5)。如果卷积层是输入层,则输入将是像素值。如果它们在网络架构中较深,则卷积层将从前一-层的特征图获取输入。 简单的局部感知,参数仍然过多,需要进-步降低参数的数量,其中的一个方法就是权值共享。在上面的例子中,每个神经元都对应100个参数,-共有000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。怎么理解权值共享呢?在这里可以把100个参数(也就是卷积操作)看成提取特征的方 式,该方式与位置无关。其中隐含的原理则是:图像的一部分统计特性与其他部分是一样的。这也意味着,在这一部分学习的特征也能用在另一部分上,所以可以在图像,上的所有位置,使用同样的学习特征。更直观地说,当从一个大尺寸图像中随机选取一小块,比如以8×8作为样本,并且从这个小块样本中学习到了一些特征,我们就可以把从这个样本中学习到的特征作为探测器,并应用到这个图像的任意地方。而且,可以用从8×8样本中学习到的特征和原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任- -位置获得一个不同特征的激活值。每个卷积都是-种特征提取方式,就像一-个筛子, 将图像中符合条件(激活值越大越符合条件)的部分筛选出来。 在卷积神经网络的设定里,特征图( Feature Map )是卷积核卷出来的,而不同的特征提取(核)会提取出不同的特征,模型想要达成的目的是,找到一组最佳的能解释现象的卷积核。 特征图对应各层神经云的输出,可以这样理解。
2.2 池化层
在卷积神经网络中,池化层对输入的特征图进行压缩,-方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。采用池化层可以忽略目标的倾斜、旋转之类的相对位置的变化,以提高精度,同时降低了特征图的维度,并且在- -定程度上可以避免过拟合。池化层通常非常简单,取平均值或最大值来创建自己的特征图。
2.3 全连接层
全连接层在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层等操作是将原始数据映射到隐藏层的特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接层通常具有非线性激活函数或softmax激活函数,预测输出类的概率。在卷积层和池化层执行特征抽取和合并之后,在网络末端使用全连接层用于创建特征的最终非线性组合,并用于预测。
3 一个案例 ●输入: 224×224大小的图片,3通道。 ●第一层卷积: 5X5大小的卷积核96个,每个GPU上48个。 ●第一层Max Pooling: 2×2大小的核。 ●第二层卷积: 3X3大小的卷积核256个,每个GPU上128个。 ●第二层Max Pooling: 2X2大小的核。 ●第三层卷积:与上一层全连接, 3×3的卷积核384个,分到两个GPU上192个。 第四层卷积: 3×3大小的卷积核384个,每个GPU上192个。该层与上一层连 接,没有经过池化层。 ● 第五层卷积: 3×3大小的卷积核256个,每个GPU.上128个。 ●第五层Max Pooling: 2×2大小的核。 ●第一层全连接: 4096维,将第五层Max Pooling的输出连接成-一个- -维向量,作 为该层的输入。 第二层全连接: 4096 维,Softmax 激活函数输出为1000,输出的每一-维都是图片 属于该类别的概率。 4 详细分析卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。 具有三维体积的神经元(3D volumes of neurons) 卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。
总的来说就是卷积层增大图片高度同时改变图片大小,但是在卷积的过程中会丢失一些信息,所以我们引入池化层。 也就是说,在卷积层不改变图片大小,在池化层改变图片大小。
卷积层由一组滤波器组成,滤波器可以视为二维数字矩阵。这是一个示例3×3滤波器:
在图像的某个位置上覆盖滤波器;将滤波器中的值与图像中的对应像素的值相乘;把上面的乘积加起来,得到的和是输出图像中目标像素的值;对图像的所有位置重复此操作。这个4步描述有点抽象,所以让我们举个例子吧。看下面的4×4灰度图像和3×3滤波器: 图像中的数字表示像素亮度,0是黑色,255是白色。我们将对输入图像和滤波器进行卷积,生成2×2输出图像。
首先,让我们将滤镜覆盖在图片的左上角:
接下来,我们在重叠的图像和滤波器元素之间逐个进行乘法运算,按照从左向右、从上到下的顺序。
把最右列的乘积结果全部相加,得到: 由于滤波器覆盖在输入图像的左上角,因此目标像素是输出图像的左上角像素: 用同样的方式处理图像剩下的区域: 2 填充 在上面的处理过程中,我们用3×3滤波器对4×4输入图像执行卷积,输出了一个2×2图像。
通常,我们希望输出图像与输入图像的大小相同。因此需要在图像周围添加零,让我们可以在更多位置叠加过滤器。3×3滤波器需要在边缘多填充1个像素。
池化 在CNN网络中卷积池之后会跟上一个池化层,池化层的作用是提取局部均值与最大值,根据计算出来的值不一样就分为均值池化层与最大值池化层,一般常见的多为最大值池化层。池化的时候同样需要提供filter的大小、步长、下面就是3×3步长为1的filter在5×5的输入图像上均值池化计算过程与输出结果
改用最大值做池化的过程与结果如下:
注意 conv、padding、pooling都有好多种不同的方式哦。! 总结一下,CNN就是将一幅图像经过一层又一层的编码过后,可以得到一个结论值,该值是对该图像的分类或描述。
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:卷积神经网络入门教程 https://www.yhzz.com.cn/a/12629.html