【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)

卷积神经网络(Convolutional Neural Networks / CNN)

CNN是干什么的,我只会说图像识别的一个框架,流行&强大
关于CNN的介绍等,刨他祖坟的一些没用的,看了就忘的原理,不在此赘述,请自行Google。


这里只有干货!


先来看一张欧美,图片里的人是在向右看还是向前看?
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第1张图片
是不是当你注视鼻子时,是向右的;注视脸左边的轮廓时,是向左的。
大脑在图像识别的时候,会反复寻找特征,特征不同的时候,识别的结果也会变复杂。
不同的特征是矛盾和冲突的,下面这个有名的图片,是可以看出两个不同的结果的,一是看向后方远处的是一个年轻的女孩;二是看向你的是一个是有皱纹的老太太(我没看粗来。是我的大脑有问题吗???)
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第2张图片
下面这个图片是不是也像鸭子,也像兔子…
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第3张图片
看下面的图流鼻血了吗?能准确他的眼睛和鼻子和嘴吗? 这就说明看图片时,是不仅仅看一个点的,而是采取一部分的特征
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第4张图片
来看一个卷积神经网络的分类结果,我的分类结果是豹子
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第5张图片
而神经网络的分类结果,第一名是cheetah猎豹,第二是leopard豹子,第三是雪豹,第四是埃及猫,怎么样,是不是比人类准!


**

1.大体结构

**


图片输入 --> CNN --> 图片结果/类别
那,图片是什么? 怎么表示?
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第6张图片
图片可以用 分辨率 X 分辨率 的形式来表示
比如2 X 2px

  • 其实就是一个二维矩阵
  • 每一个数都属于[0,255],每一张黑白图片是一个二维矩阵
  • 彩色图片则是由三个叠加的二维矩阵来表示。就是一个三维矩阵,每一层还是2 X 2
    【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第7张图片
    上面的笑脸,可以简单地用一个7 X 7的矩阵图来表示,假设白色为0,黑色为1,那么数字化之后便成为了右边的7 X 7 矩阵,当遇到更复杂的图片的时候,矩阵的维度将会变得更大,每一个数也会是[0,255]

2.内部结构

2.1卷积 Convolution

先介绍一个过滤器 filter/特征探测器feature detector/核 kernel
一般是3 X 3 / 4 X 4 / 5 X 5 的矩阵,我们随机选取一个3 X 3的过滤器(称为Ag)来举栗子
取图片的一部分,使其维度大小跟过滤器一样,称为矩阵At,得到的特征图的矩阵的第[1,1]的值就是Ag与At的点积,也是数量积(即 SUM( A[i,j] * A[i,j]) )
接下来,将At右移一列,便可以得到特征图的第[1,2]的值,以此类推,得到特征图的所有值。
因为At移动五次变无法移动了,所以特征图在这个例子中是5 X 5矩阵
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第8张图片
最后的结果如下图,虽然维度变小,丢失了一部分信息,但是这并不重要,这也正好是卷积的目的。
因为过滤器存储着每一个特征的信息,应用时它,得到的结果就是这个图片以什么样的形式展示了过滤器存储的特征,特征图上的数字都隐含了原先图片上一部分的跟特征的吻合程度,一层卷积过后,图像变得更加抽象,卷积的层数有时候不仅仅只有一层。
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第9张图片
上面的例子,At每次只移动一列,记作步频为1,我们可以设置步频为2,那么得到的特征图的维度将会变得更小。

下面的图的意思就是,每一层的卷积,都会有不同的过滤器,每一个过滤器对应一个特征图
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第10张图片
看,神经网络的奠基人之一,经过过滤器之后,被灰了
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第11张图片
2.1.1线性整流激活层
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第12张图片
将卷积层得到的值,直接扔进线性整流层,会增加整个网络的非线性性。我们可以这么认为:仅仅通过卷积层是线性,增加线性整流卷积层之后,会增加网络的训练效率,效果也会变得更好。

2.2最大池化 Max Pooling

【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第13张图片
最大池化就是将卷积层得到的特征图,经过一个2 X 2的矩阵选取该矩阵的最大值,上图第一步的值就是2
下面是第三步,不要有疑问,就是这样取两个的最大值就可以
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第14张图片
以此类推,结果如下图所示。
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第15张图片
起决定性影响是该部分的最大值,发现问题了吗,是不是特征经过最大池化之后,被放大了?
最后呢,网络渐渐地变得完整了…
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第16张图片

2.3扁平化 Flattening

池化后的特征图 - > 将矩阵变成一列向量,没有数学上的运算! 看图!不用多说!
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第17张图片
池化层之后的特征图,通过扁平化,所有的变量变成了一排很长的自变量。
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第18张图片

2.4全连接 Full connection

【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第19张图片
全连接层将输入和输出一一的相连接起来,构建起了人工神经网络。
【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第20张图片
下面,那我们要对阿喵阿汪的图片就行分类,设置神经网络有两个隐含层,输出层有两个,分别都是阿喵阿汪预测的概率。【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第21张图片
图片中有五步重要训练预测的步骤,请详细阅读!
更新时,也会将前面特征探测器中的我们自己设置的参数就行更新,好处是,找到更加理想的特征,没有用处的特征也会慢慢的被丢弃。
经过多次的更新迭代,就可以得出比较理想的预测值了。
隐藏层的最后一层神经元是比较重要的,因为他们直接导致了输出层的数值,也就说明里面包含了非常抽象的特征,尤其是经过很多次迭代,人抽象到类已经无法进行辨别的程度,但这也是神经网络的强大之处!

3.总结

【深度学习】CNN卷积神经网络-识别阿喵阿汪(上)_第22张图片

  • 首先将图片输入
  • 经过Convolutional Layer卷积层,里面会有很多的特征图,是输入图片经过特征探测器生成的图片,在此基础上可以加上线性激活整流层,增加非线性性
  • 接下来,Pooling池化层,得到维度更小的特征图,可以有效地减少网络中的参数、自变量,可以最大限度的控制过拟合。在应用中,我们会增加多层的卷积、池化层,更有效的抓住抽象的特征
  • 池化后的自变量,转入扁平层,进入神经网络
  • 进行训练,预测

点击 ->下面就将进入,识别阿喵阿汪的实战了!


你可能感兴趣的:(机器学习(派神),深度学习)