PyTorch搭建CNN网络之CNN卷积神经网络

卷积神经网路CNN

所有的伟大,源于一个勇敢的开始!

1.神经网络基础
1.1神经网络模型介绍
神经网络(Neural Networks,NN)是一种模仿人类神经元之间信息传递的数学算法模型。本节将介绍3种经典的神经网络模型结构,分别是M-P神经元模型、感知机模型和多层感知机模型。
1.1.1 M-P神经元模型
1943年,心理学家沃伦·麦卡洛克(Warren McCulloch)和数理逻辑学家沃尔特·皮兹(Walter Pitts)建立了神经网络的数学模型,称为M-P模型(以二人的名字命名,又称M-P神经元模型)。
M-P神经元模型
A)M-P模型的工作原理:
(1)模型接受N个输入。(x1, x2, … , xn)
(2)将输入与权值参数(w1j,w2j,…,2nj)进行加权求和并经过激活函数(非线性变换,如Relu函数)激活。
(3)将激活结果作为结果输出(yi)。

但是由于M-P模型缺乏学习机制,故以M-P模型为基础,学者们开发出了后来的感知机模型。

1.1.2 感知机模型
感知机(Perceptron)模型是由美国心理学家弗兰克·罗森布拉特(Frank Rosenblatt)于1957年提出的一种具有单层计算单元的神经网络。
感知机模型
它由两层神经元组成,输入层接收外界信号,输出层是许多个并列的M-P神经元,这些M-P神经元被称为处理单元或计算单元。相较于M-P神经元模型,感知机模型其实就是输入、输出两层神经元之间的简单全连接。

A)Rosenblatt教授给出了感知机模型的学习机制,其过程可以概括如下。
(1)对权值参数进行初始化
(2)将训练集的一个输入值传递到输入层,通过感知机计算输出值(0或1)
(3)比较感知机计算的输出值和真实的输出值是否相同,若输出值小于期望值,则向输出值更大的方向增加相应的权重;若输出值大于期望值,则向输出值更小的方向减少相应的权重。
(4)对训练集中下一个输入值重复步骤(2)和步骤(3),直到感知机计算不再出错。

感知机运行原理感知机输入到输出函数
其中,w 和 x 为感知机模型参数,w叫做权值或权值向量(控制输入信号的重要性), b 叫偏置(调节神经元被激活的容易程度), Sign 是符号函数(激活函数),即
sign函数
在感知机中,只有两种输出,其中,0代表“不传递信号”,1代表“传递信号”。当输入信号被送往神经元时,分别乘以各自的权重,然后加总,如果总和超过阈值,则f(x)的输出为1,否则为0。

1.1.3 多层感知机模型
多层感知机模型(Multilayer Perceptron,MLP),就是在输入层和输出层之间加入了若干 隐藏层,以形成能够将样本正确分类的凸域,使得神经网络对非线性情况的拟合程度大大增强。
多层感知机
上图也被称为全连接神经网络,全连接是指神经网络模型中相邻两层单元之间的连接方式,使用全连接方式时,网络当前层的单元与网络上一层的每个单元都存在连接。

A)在多层感知机中,信号的传递:
(1)input层的3个神经元接收输入信号,并将信号发送至Hidden_layer1的神经元。
(2)Hidden_layer1神经元将信号发送至Hidden_layer2神经元。
(3)Hidden_layer2神经元将信号发送至output层神经元,然后output层神经元给出最后的输出。

2. 从神经网络到卷积神经网络(CNN)
从上面知道神经网络的结构是这样的:
在这里插入图片描述
那卷积神经网络跟它是什么关系呢?
其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。
在这里插入图片描述
卷积神经网络的层级结构
• 数据输入层/ Input layer
  • 卷积计算层/ CONV layer
  • ReLU激励层 / ReLU layer
  • 池化层 / Pooling layer
  • 全连接层 / FC layer
A)数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
• 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
• 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
• PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
B)卷积计算层
在这个卷积层,有两个关键操作:
  • 局部关联。每个神经元看做一个滤波器(filter)
  • 窗口(receptive field)滑动, filter对局部数据计算
先介绍卷积层遇到的几个名词:
  • 感受视野( local receptive fields)
  • 深度/depth(解释见下图)
  • 步长/stride (窗口一次滑动的长度)
  • 填充值/zero-padding
• 卷积核
• 共享权值(shared weights)

a)感受视野( local receptive fields)
即感受上一层的部分特征。在卷积神经网络中,隐藏层中的神经元的感受视野比较小,只能看到上一次的部分特征,上一层的其他特征可以通过平移感受视野来得到同一层的其他神经元。
b)深度(depth)
在这里插入图片描述
c)步长(stride)
感受视野对输入的扫描间隔称为步长(stride)
d)填充值/zero-padding
当步长比较大时(stride>1),为了扫描到边缘的一些特征,感受视野可能会“出界”,这时需要对边界扩充(pad)。
以下图为例子,比如有这么一个55的图片(一个格子一个像素),我们滑动窗口取22,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?
在这里插入图片描述
那我们在原先的矩阵加了一层填充值,使得变成66的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。
在这里插入图片描述
e)卷积核
感受视野中的权重矩阵
f)共享权值
权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个3
3*1的卷积核,这个卷积核内9个的参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。
图像处理中的类似边缘检测,滤波操作等等都是在做全局共享。

卷积的计算(注意,下面蓝色矩阵周围有一圈灰色的框,那些就是上面所说到的填充值)
在这里插入图片描述
蓝色的矩阵(输入图像)对粉色的矩阵(filter)进行矩阵内积计算并将三个内积运算的结果与偏置值b相加(比如上面图的计算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),计算后的值就是绿框矩阵的一个元素。
在这里插入图片描述

下面的动态图形象地展示了卷积层的计算过程:在这里插入图片描述
C)激励层
把卷积层输出结果做非线性映射。
在这里插入图片描述
CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。
Relu函数
注释:
三个常用激活函数:Sigmoid(经验说明尽量不要用)、tanh和Relu
其他激活函数:leaky relu、elu、crelu、selu、relu6、softplus、softsign等

D)池化层
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。
Max pooling
对于每个22的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个22窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。

average pooling,以上图为例,输入矩阵第4个2*2窗口中总和为8,均值为2,那么输出矩阵的第四个元素就是2,如此类推。

E)全连接层
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
在这里插入图片描述
一般CNN结构依次为
  1. INPUT
  2. [[CONV -> RELU]*N -> POOL?]*M
  3. [FC -> RELU]*K
  4. FC

卷积神经网络之典型CNN
  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比
  • LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好

3. 总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

参考博客:
1.https://www.cnblogs.com/skyfsm/p/6790245.html
2.https://blog.csdn.net/asialee_bird/article/details/80459163

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值