Python_DL_July_03_卷积神经网络与图像识别

1. 神经网络与CNN的异同点

  • 传统的神经网络的神经元、参数比较多,而CNN可以大大简化神经元和参数的数量。但计算量要大大的提高。

  • 传统神经网络采用的是f(x) = wx+b。但CNN中虽保留了层级式的网络结构,但不同层次有不同的形式,即运算和功能。输出时做归一化,转化成概率向量,让CNN能最终知道它最可能的图片意思是什么?

2. CNN层级结构

  • conv layer的工作原理:conv layer中的神经元看出做一个filter(3x3x3的矩阵,每个filter都带有不同的weights,即特征不同)。每个filter都要通过窗口滑动,并进行局部计算,分别得到每个位置的不同的feature maps(有多少个filter,就有多少了feature map)。
  • conv layer运算操作demo:https://cs231n.github.io/assets/conv-demo/index.html 。其中输入数据做了zero-padding,有2个filter,每个filter有3个通道,y=wx+b,输出时深度为2的feature map,通过点乘以后得到的值。
  • activation layer: 

      

  • pooling:本质是降维,在保证大多数的数据的情况下,把维度降下来有两种办法:1. 取max值,2. 求平均。
  • FC layer:两层之间的所有神经元都有权重连接,并出现在CNN的尾部。

3. 卷积神经网络训练算法 

  • FP是利用y=(wx+b),再激励函数做激励。
  • BP就是对激励函数后的值算dw和db的偏导,最终在BP传播的过程中利用SGD进行更新w和b。

4. 正则化,过拟合

  • Regulation:L1&L2,防止overfitting
  • Dropout:随机设置50%输出的值为0,而下一次再把设置改回来,再随机设置50%的输出值为0.  

正文

 

1. 神经网络与卷积神经网络

神经网络可以处理各种数据,由文本数据、图像数据、语音数据和视频数据等等。在处理图像数据的神经网络就是CNN,它主要完成分类工作。

传统的神经网络的神经元、参数比较多,而CNN可以大大简化神经元和参数的数量。但计算量要大大的提高。

1)CNN层次结构 

传统神经网络采用的是f(x) = wx+b。但CNN中虽保留了层级式的网络结构,但不同层次有不同的形式,即运算和功能。输出时做归一化,转化成概率向量,让CNN能最终知道它最可能的图片意思是什么?

  

CNN的核心三层:conv为convolution layer,ReLU为activation layer,Pool为pooling layer。有时,conv layer和ReLU一起叫做conv layer。

FC layer是全连接层,它的相邻层都是全连接。

Batch Normalization层是个高级层次(15年提出),主要是训练用的。

   

二维数据(x1,x2),做中心化就是把每个值减去相应的值,平移到原点。如果不做中心化,在工业上会发现它非常容易饱和。 中心化后,(x1,x2)的scale的幅度不一样,为了后面的计算更顺利,可以做normalization,即gaining除以它的方差。

  • 饱和的概念:BP是链式求导法则。如果你的activation非常大,它的导数接近0, 意味着我用梯度下降学不到东西。它就饱和了。这叫做梯度消失或梯度弥散

有可能(x1,x2)是有关联的数据,那么我们就会将数据做纵坐标和横坐标的投影,得到的(x1,x2)维度无相关。

以上都是数据的处理方式,但对于图像,我们大多只做去均值。因为图片的像素值在0~255之间的,所以不需要对它的幅度做调整。它的维度和幅度大小都一致。scanning的操作可做可不做,因为不做不会影响后续的工作,它的维度天生就限制在一个范围内了。 

取均值有两种方式,Alexnet和VGG :

  • Alexnet:一张彩色图片是227x227x3,它去均值有两种方式:把所有训练集里的1W张图片的227x227x3的矩阵加在一起,再除以1W,得到一个均值的矩阵227x227x3,后续利用这个mean matrix的减法。
  • VGG:一张彩色图片是227x227x3,是三个通道,分别是RGB。可以简单认为 它是3维的向量,VGG是在这3个通道上,分别去剪掉这三个均值。

1.1) conv layer

conv layer的工作原理:conv layer中的神经元看出做一个filter(3x3x3的矩阵,每个filter都带有不同的weights,即特征不同)。每个filter都要通过窗口滑动,并进行局部计算,分别得到每个位置的不同的feature maps(有多少个filter,就有多少了feature map)。

  • 深度表示有多少个filter参与了计算,就有多少个feature map,深度就是多少,也是下一层filter的个数。
  • 步长表示窗口滑动的间隔大小。
  • 填充值:有时候输入数据的窗口,不能被filter的窗口和步长整除,所以要做padding,在边缘补一圈0。

  

conv layer的数据处理:我们的filter是3x3的矩阵,利用filter和原始数据的相应位置上的矩阵做运算(Σwx),得到加权求和的值(-8),

conv layer参数共享机制:每个神经元连接数据窗的权重weights是固定的,可以看成是不同的模板,并且灭个weight值关注自己的特性。

 

 1.2) activation layer 

通过卷积后,我们还需要利用激励函数对卷积(点乘,y=Σwx+b)的值进行激励。

   

  • sigmoid和tahn的缺点就是他们的梯度弥散问题(饱和)。 
  • ReLU:max(0,x),当输入是负数时,为0, 当输入是正数时,为输入值。
  • leaky ReLu,当输入为负数时,权重为很小。
  • ELU:当输入为负数时,激励函数为a(ex-1)

1.3) 池化/pooling layer

2012-》2013年的2Fnet的冠军没有结构上的改变,但是改变了filter的个数,所以利用pooling把大部分的信息留下就好,称为下采样。

  

 pooling本质是降维,在保证大多数的数据的情况下,把维度降下来,有两种操作办法:1. 取max值,2. 求平均。

1.4) FC layer

FC layer:两层之间的所有神经元都有权重连接,并出现在CNN的尾部。

 

1.5) 卷积层可视化理解

图片为输入数据,每个卷积层的左图为filter,右图为通过卷积后的data。

   

  

 3)卷积神经网络训练算法 

BP就是对激励函数算dw和db的偏导,最终在BP传播的过程中利用SGD进行更新w和b。

   

4) 卷积神经网络优缺点:

 

2. 正则化

Regulation:L1&L2,防止overfitting

Dropout:随机设置50%输出的值为0,而下一次再把设置改回来,再随机设置50%的输出值为0. 

     

3. 经典结构与训练

 

 

  

AlexNet为了得到很多的信息,把步长设置为1,这样扫图就会更仔细。 

原文地址:https://www.cnblogs.com/tlfox2006/p/13163171.html