【深度学习】卷积神经网络CNN

一、传统神经网络

1、 神经元:
一个神经元的神经网络基本为 z = W X + b z = WX+b z=WX+b。其中:
(1) x i \displaystyle x_{i} xi表示输入向量
(2) w i \displaystyle w_{i} wi为权重,几个输入则意味着有几个权重,即每个输入都被赋予一个权重
(3)b为偏置bias,提高泛化能力。
(4)g(z) 为激活函数,一般为sigmoid函数,目的是将输出压缩到0-1之间。
(5)a 为输出
在这里插入图片描述
2、激活函数:
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。
如sigmoid函数 g ( z ) = 1 1 + e − z \displaystyle g( z) =\frac{1}{1+e^{-z}} g(z)=1+ez1,其中z是一个线性组合,比如z可以等于 z = w 1 ∗ x 1 + w 2 ∗ x 2 + b \displaystyle z=w_{1} *x_{1} +w_{2} *x_{2} +b z=w1x1+w2x2+b。通过代入很大的正数或很小的负数到g(z)函数中,其结果趋近于0或1。
sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。
在这里插入图片描述
3、神经网络
下图是一个三层神经网络结构,最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。
(1)输入层(Input layer),众多神经元(Neuron)接受大量非线形输入信息。输入的信息称为输入向量。
(2)输出层(Output layer),信息在神经元链接中传输、分析、权衡,形成输出结果。输出的信息称为输出向量。
(3)隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。每个连线上的权重不同

在这里插入图片描述

二、CNN

卷积神经网络保留了传统神经网络的结构,但每个隐层有不同的运算与功能。前面几层先学轮廓,后面学细节。
在这里插入图片描述
1、数据输入层(input layer):
常见的三种数据处理方式:
(1)去均值:把数据各个维度都中心化到0,避免数据过多偏差,影响训练效果
(2)归一化:幅度归一化到同样范围
(3)PCA/白化:降维,并对每个特征进行幅度归一化
2、卷积计算层(CONV layer)
(1)原理:
对应位置上是数字先相乘后相加。如,中间滤波器filter(带着一组固定权重的神经元)与数据窗口做内积,其具体计算过程:40 + 00 + 00 + 00 + 01 + 01 + 00 + 01 + -4*2 = -8特征抽取的主要工作在这层进行。不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。
在这里插入图片描述在这里插入图片描述
(2)GIF动态卷积图详解
在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。CNN中的参数(权重)共享机制。参数如下:

  • 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
  • 步长stride:决定滑动多少步可以到边缘。
  • 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
    在这里插入图片描述
    动态图如下:
    随着左边数据窗口的平移滑动,滤波器Filter w0 / Filter w1对不同的局部数据进行卷积计算。得到两组不同的结果。
  • 两个神经元,即depth=2,意味着有两个滤波器。
  • 数据窗口每次移动两个步长取3*3的局部数据,即stride=2。
  • zero-padding=1。

在这里插入图片描述
3、激励层
常使用ReLU是激活函数的一种,因为实际梯度下降中,sigmoid连乘容易引起梯度爆炸或梯度消失,且没有0中心化。
在这里插入图片描述
4、池化层
即取区域平均或最大。如下图左边部分中 左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,左下角2x2的矩阵中3最大,右下角2x2的矩阵中4最大,所以得到上图右边部分的结果:6 8 3 4。可以降低维度。
在这里插入图片描述
5、全连接层
在卷积神经网络的最后,往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图转化成一维的一个向量
输入层 128 ∗ 256 ∗ 256 ∗ 3 128*256*256*3 1282562563 (batch=128,图片大小 256 ∗ 256 256*256 256256,3个通道)
第一层卷积层 128 ∗ 256 ∗ 256 ∗ 16 128*256*256*16 12825625616(batch=128,图片大小 256 ∗ 256 256*256 256256,16个通道)(以 4 ∗ 4 4*4 44的窗口滑动,步长strid=1,填充padding=3;16个神经元)(为了方便理解,对边框进行填充,使得卷积后维度不变。16个神经元计算并行做卷积和,每个神经元计算后3个通道的值相加)
第一层池化 128 ∗ 128 ∗ 128 ∗ 16 128*128*128*16 12812812816(batch=128,以 2 ∗ 2 2*2 22的窗口滑动,图片尺寸缩小二分之一,步长strid=2;16个神经元)
第二层卷积层 128 ∗ 128 ∗ 128 ∗ 32 128*128*128*32 12812812832(batch=128,以 4 ∗ 4 4*4 44的窗口滑动,32个神经元,步长strid=1,填充padding=3,32个神经元计算并行做卷积和,每个神经元计算后16个通道的值相加)
第二层池化 128 ∗ 64 ∗ 64 ∗ 32 128*64*64*32 128646432(batch=128,以 2 ∗ 2 2*2 22步长strid=2的窗口滑动)
全连接层过程
方法一:将32层特征图片相加,将6464的矩形展平成。生成长度为(128,6464)维
方法二:将646432全部展平(128,646432)维,如:
特征展平操作reshape 128 ∗ ( 64 ∗ 64 ∗ 32 ) 128*(64*64*32) 128(646432)
DNN1 ( 64 ∗ 64 ∗ 32 ) ∗ 100 (64*64*32)*100 (646432)100
维度变为: 128 ∗ 100 128*100 128100
DNN2 100 ∗ 10 100*10 10010
维度变为: 128 ∗ 10 128*10 12810 (10为最后分类时类别的个数)
softmax 128 ∗ 10 128*10 12810 将输出结果压缩到0-1之间,得到概率值。
(省去了RELU层,RELU不改变维度和尺寸,只是加入了非线性变化的作用)

在这里插入图片描述

参考文献:
https://blog.csdn.net/v_JULY_v/article/details/51812459

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值