卷积神经网络基础

0.图像基础知识

1)视频与图像

视频(Video),连续的图像变化每秒超过24帧(frame)画面以上时,看上去是平滑连续的视觉效果,这样连续的画面。

每帧都是一副图像

灰度图,Gray Scale Image 或是Grey Scale Image,又称灰阶图,单通道(二维矩阵)。

灰度分为256阶。0-255(00000000-11111111,黑-白),电路暗点、亮点。

RGB图,即三通道(三维矩阵),由红绿蓝通道叠加为彩色图。
在这里插入图片描述

对图像归一化处理:data=/255,每个像素值/255,转化为易于神经网络处理的数值。

计算机视觉图像,是一种矩阵与数字信号处理。

2)Opencv与Numpy等图像处理常用包

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。

它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

其他:PIL、matplotlib

python安装:pip install opencv-python

1.神经网络图像分类(以VGG16网络为例的特征提取)

0)介绍什么是卷积(convolution)、池化(pooling)、激活函数、全连接和Softmax

卷积(convolution)

卷积是在图像像素上的滑动窗口计算。有以下几个关键词:

padding,围绕图像填充一圈像素。

kernel size,卷积核大小

stride,卷积步长

下图示例其实就是卷积的过程,能够看出它的卷积核大小是3x3,步长就是卷积核的移动步数,步长为1,围绕图像填充一圈0像素,padding为1。

在这里插入图片描述

每次卷积出的值计算过程如下图所示:
在这里插入图片描述

池化(pooling)

经过卷积操作后,卷积层的参数量依旧很多,因此通过池化将输入的特征图进行压缩,一方面来说特征图得以变小减少了网络的参数量;另一方面则将主要特征提取出来。

下图是池化的操作,左边是平均值池化,右边是最大值池化。
在这里插入图片描述

激活(激活函数)

Sigmoid函数,tanh函数,Relu函数等等,卷积操作为线性操作,这就导致一个问题,那就是模型的表达能力不够,反向传播误差求偏导数的时候层数过深会失活。

激活函数是非线性函数,它可以为计算加入非线性因素以增加非线性表达的能力,主要分成饱和激活函数和非饱和激活函数两类。

全连接和Softmax

全连接,顾名思义就是将经历卷积以后的特征层的特征都连接起来,连接过后就可以进行统计分类了,通常情况下,在进行全连接的计算时,可以把它等效于卷积核为1x1的卷积运算。

SoftMax处理多个类别分类的问题,输出一个概率。并且,需要把每个分类的得分值换算成概率,同时解决两个分类得分值接近的问题。

SoftMax是网络的最后一层,输出识别为某类的概率。

1)卷积特征图feature map的参数计算

以VGG16为例,feature map的大小区分conv1 conv2 … 在conv1或conv2中feature map的大小是不变的,从conv1到conv2的池化操作会改变feature map大小。如下图:

实际上在卷积或池化后:

feature map size = output size

n filters = n channels = n feature map(n=64,128,256,512,1024…)

一个input image:WxH=224x224的RGB,c=3或k=3的三通道图像,经过Conv1_1feature
map的大小为224x224,通道的改变为64,即为卷积核的个数变化。

在这里插入图片描述

特征图大小公式,W=H=(n+2p-f)/s+1,其中:

  • W、H: 图长宽
  • n: 上一层特征图大小
  • p: padding,图像像素填充
  • f: kernel size,卷积核大小
  • s:stride,卷积步长

2)VGG16网络完整模型图

在这里插入图片描述

3)参考学习资料

卷积神经网络基础,VGG16模型详解,全连接和Softmax

2.深度学习(训练)过程

0)综述

深度学习的过程可以分为前向传播和反向传播两个过程。这个过程中,前向传播是为了计算和目标的误差,反向传播是为了传播误差并更新每个神经元上的权重系数。

学习过程简述

目标:得到更接近你想要的输出o1,o2,即更准确地预测

过程:固定的输入x1,x2…>通过反向传播不断更新权重>得到更接近你想要的输出o1,o2…

  1. 利用前向传播求出误差E
  2. 求出误差E对权重W的偏导数
  3. 利用权重更新公式更新权重W,其中 α 是学习率
  4. 继续反向传播,更新更接近输入层的权重W,直到更新所有的权重W
  5. 循环1,2,3,4过程,不断更新权重W,降低误差E,最终得到训练好的神经网络(即适合的权重W)

【注意】权重W的更新是从输出层==》隐含层==》输入层,一步步更新的

1)前向传播

简单来说,前向传播过程就是数据从输入层传入,经过隐藏层,最终到达输出层的过程。如下图所示,图中包含一个输入层,一个隐藏层和一个输出层。

从左向右进行计算是一种正方向上的传播,简称为正向传播 (forward propagation)。

2)反向传播

加法的反向传播只是将上游的值传给下游,并不需要正向传播的输入信号。但是乘法的反向传播需要正向传播时的输入信号值。

因此,实现乘法节点的反向传播时,要保存正向传播的输入信号,从右向左的传播称为反向传播 (backward propagation)。

计算图的反向传播:沿着与正方向相反的方向,乘上局部导数。

反向传播的核心在于复合函数的链式求导法则,反向传播的作用在于优化代价函数,这也是训练神经网络的目标。

反向传播的计算顺序是:

将信号 E 乘以节点的局部导数 (∂ y/∂ x),然后将结果传递给下一个节点。这里所说的局部导数是指正向传播中y = f (x) 的导数,也就是 y 关于 x 的导数(∂ y/∂ x)。

如 y = f ( x ) = x^2 则局部导数为(∂ y/∂ x) = 2x。

把这个局部导数乘以 E,然后传递给前面的节点。这就是反向传播的计算顺序。

通过这样的计算,可以高效地求出导数的值,这是反向传播的要点。

3)参考学习资料

前向传播算法与反向传播算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值