文章目录

  • 概述
  • 卷积神经网络
    • 局部连接+权值共享**
    • 输入层
    • 卷积层
    • 激励层
    • 池化层
    • 全连接层
  • 参考资料

概述

这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊。看到了一篇博文写的很好,通过仔细阅读,对这块的知识有了进一步的认识。因此对其进行总结,方便之后查阅,也防止笔记丢失。之后有新的关于这块的总结和理解也会补充进来。
贴出博文链接:https://zhuanlan.zhihu.com/p/363345545

卷积神经网络

卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-> CONV(卷积层)-> RELU(激活函数)-> POOL(池化层)-> FC(全连接层)。

局部连接+权值共享**

为了避免过拟合的情况,应该把神经元和神经元之间的连接的权重个数降下来,但是降下来我们又不能保证它有较强的学习能力,所以这是一个纠结的地方,所以有一个方法就是局部连接+权值共享,局部连接+权值共享不仅权重参数降下来了,而且学习能力并没有实质的降低。

卷积神经网络就是局部连接+权值共享的神经网络。

输入层

在图片输出到神经网络之前,常常先进行图像处理,有三种常见的图像的处理方式:

  1. 均值化:把输入数据各个维度都中心化到0,所有样本求和求平均,然后用所有的样本减去这个均值样本就是去均值。
  2. 归一化:数据幅度归一化到同样的范围,对于每个特征而言,范围最好是[-1,1]
  3. PCA/白化:用PCA降维,让每个维度的相关度取消,特征和特征之间是相互独立的。白化是对数据每个特征轴上的幅度归一化。

卷积层

图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是它周边的像素点,而距离这个像素点比较远的像素点二者之间关系不大。

在卷积神经网络中,我们先选择一个局部区域(filter),用这个局部区域(filter)去扫描整张图片。局部区域(filter)也成为感受野。

当前filter是2*2的小窗口,这个小窗口会将图片矩阵从左上角滑到右下角,每滑一次就会一下子圈起来四个,连接到下一层的一个神经元,然后产生四个权重,这四个权重(w1、w2、w3、w4)构成的矩阵就叫做卷积核。卷积核是算法自己学习得到的,它会和上一层计算。

下图是卷积操作:

卷积层的连接方式:

图片是一个矩阵然后卷积神经网络的下一层也是一个矩阵,我们用一个卷积核从图片矩阵左上角到右下角滑动,每滑动一次,当然被圈起来的神经元们就会连接下一层的一个神经元,形成参数矩阵这个就是卷积核,每次滑动虽然圈起来的神经元不同,连接下一层的神经元也不同,但是产生的参数矩阵确是一样的,这就是权值共享

卷积的计算过程:

filter滑动9次之后,会产生9个值,也就是说下一层有9个神经元,这9个神经元产生的值就构成了一个矩阵,这矩阵叫做特征图,表示image的某一维度的特征,当然具体哪一维度可能并不知道,可能是这个图像的颜色,也有可能是这个图像的轮廓等等。

单通道图片总结:以上就是单通道的图片的卷积处理,图片是一个矩阵,我们用指定大小的卷积核从左上角到右下角来滑动,每次滑动所圈起来的结点会和下一层的一个结点相连,连接之后就会形成局部连接,每一条连接都会产生权重,这些权重就是卷积核,所以每次滑动都会产生一个卷积核,因为权值共享,所以这些卷积核都是一样的。卷积核会不断和当时卷积核所圈起来的局部矩阵作用,每次产生的值就是下一层结点的值了,这样多次产生的值组合起来就是一个特征图,表示某一维度的特征。也就是从左上滑动到右下这一过程中会形成一个特征图矩阵(共享一个卷积核),再从左上滑动到右下又会形成另一个特征图矩阵(共享另一个卷积核),这些特征图都是表示特征的某一维度。

三个通道的图片如何进行卷积操作:

彩色图像都是RGB三个通道的:

在单通道图像中,只是从width和height的角度来滑动的,并没有考虑depth,所以每滑动一次实际上是产生一个卷积核,共享这一个卷积核。而现在depth=3了,所以每滑动一次实际上产生了具有三个通道的卷积核(它们分别作用于输入图片的蓝色、绿色、红色通道),卷积核的一个通道核蓝色的矩阵作用产生一个值,另一个和绿色的矩阵作用产生一个值,最后一个和红色的矩阵作用产生一个值,然后这些值加起来就是下一层结点的值,结果也是一个矩阵,也就是一张特征图。

三通道的计算过程:

增加一个卷积核,就会产生一个特征图,总的来说就是输入图片有多少通道,我们的卷积核就需要对应多少通道,而本层中卷积核有多少个,就会产生多少个特征图。有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积核来对应处理。

基本概念:

  1. 深度depth(通道):由上一层滤波器的个数决定.
  2. 步长stride:每次滑动几步,步数越大得到的特征数越少。
  3. 填充值zero-padding:我们设置了步长之后,很有可能某些位置滑不到,为了避免了边缘信息被一步步舍弃的问题,我们需要设置填充值来解决这个问题。还有一个问题,4x4的图片被2x2的filter卷积后变成了3x3的图片,每次卷积后都会小一圈的话,经过若干层后岂不是变的越来越小?zero padding就可以在这时帮助控制Feature Map的输出尺寸,同时避免了边缘信息被一步步舍弃的问题。

卷积计算的公式:

4x4的图片在边缘Zero padding一圈后,再用3x3的filter卷积后,得到的Feature Map尺寸依然是4x4不变。当然也可以使用5x5的filte和2的zero padding可以保持图片的原始尺寸,3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。

Zero padding:

规律: Feature Map的尺寸为:

(input_size + 2 * padding_size − filter_size)/stride+1

卷积层的作用**总结为:**卷积层其实就是在提取特征,卷积层中最重要的是卷积核(训练出来的),不同的卷积核可以探测特定的形状、颜色、对比度等,然后特征图保持了抓取后的空间结构,所以不同卷积核对应的特征图表示某一维度的特征,具体什么特征可能我们并不知道。特征图作为输入再被卷积的话,可以则可以由此探测到"更大"的形状概念,也就是说随着卷积神经网络层数的增加,特征提取的越来越具体化。

激励层

激励层的作用可以理解为把卷积层的结果做非线性映射

上图中的f表示激励函数。激活函数是用来加入非线性因素的,因为线性模型的表达力不够。

假设如果没有激活函数的出现,每一层节点的输入都是上层输出的线性函数,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,也就是说没有激活函数的每层都相当于矩阵相乘,那么网络的逼近能力就相当有限。因此引入非线性函数作为激活函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可逼近任意函数)

常用的激励函数几下几种:

  • Sigmoid

激励函数Sigmoid导数最小为0,最大为1/4

  • Tanh(双曲正切)

Tanh和sigmoid相似,它会关于x轴上下对应,不至于朝某一方面偏向

  • ReLU(修正线性单元)

收敛快,求梯度快,但较脆弱,左边的梯度为0。

  • Leaky ReLU

不会饱和或者挂掉,计算也很快,但是计算量比较大。

一些激励函数的使用技巧:一般不要用sigmoid,首先试RELU,因为快,但要小心点,如果RELU失效,请用Leaky ReLU,某些情况下tanh倒是有不错的结果。

池化层

池化层:降低了各个特征图的维度,但可以保持大分重要的信息。池化层夹在连续的卷积层中间,压缩数据和参数的量,减小过拟合,池化层并没有参数,它只不过是把上层给它的结果做了一个下采样(数据压缩)。下采样有两种常用的方式:

  • Max pooling:选取最大的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图中取出最大的元素,最大池化被证明效果更好一些。

  • Average pooling:选取平均的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图算出平均值。

要注意一点的是:pooling在不同的depth上是分开执行的,也就是depth=5的话,pooling进行5次,产生5个池化后的矩阵,池化不需要参数控制。池化操作是分开应用到各个特征图的,我们可以从五个输入图中得到五个输出图。

池化操作

无论是max pool还是average pool都有分信息被舍弃,那么部分信息被舍弃后会损坏识别结果吗?

因为卷积后的Feature Map中有对于识别物体不必要的冗余信息,我们下采样就是为了去掉这些冗余信息,所以并不会损坏识别结果。

卷积核就是为了找到特定维度的信息,比如说某个形状,但是图像中并不会任何地方都出现这个形状,但卷积核在卷积过程中没有出现特定形状的图片位置卷积也会产生一个值,但是这个值的意义就不是很大了,所以我们使用池化层的作用,将这个值去掉的话,自然也不会损害识别结果了。

最大池化处理:

这个例子中,在探测某个特征时,卷积后得到3x3的Feature Map,真正有用的就是数字为3的那个节点,其余数值对于这个任务而言都是无关的。如果不使用Max pooling,而让网络自己去学习,网络也会去学习与Max pooling近似效果的权重。因为是近似效果,增加了更多的参数的代价,却还不如直接进行最大池化处理。

全连接层

在全连接层中所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。当前面卷积层抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 通常卷积网络的最后会将末端得到的长方体平摊成一个长长的向量,并送入全连接层配合输出层进行分类。比如,在下面图中我们进行的图像分类为四分类问题,所以卷积神经网络的输出层就会有四个神经元。

参考资料

  1. https://zhuanlan.zhihu.com/p/363345545
  2. https://blog.csdn.net/yjl9122/article/details/70198357

卷积神经网络---卷积层、激励层、池化层以及全连接层相关推荐

  1. 全连接层的作用_python构建计算图2——全连接层

    (好久不更~)前文中,参照tensorflow的方式实现了简单的自动求导.接下来要在自动求导的基底(模板)上搭建简单的bp神经网络. 计算图 前文曾多次提到计算图,关于什么是计算图,有很多种说法.既然 ...

  2. 卷积神经网络(CNN)之池化层的实现

    池化层的实现和卷积层的实现差不多,都是使用im2col来展开输入数据,只不过在池化的应用区域是按照通道单独展开.看图更直观. 图中我们可以看出,对输入数据进行展开之后,再对展开的矩阵求各行的最大值,这 ...

  3. 卷积云神经网络_有卷积云的北京天空好美!是不是还有池化云?全连接云?

    最近几天北京真是好冷,许多人已经从箱底里拿出了原本在11月底才会穿上的厚外套. 气温是低,不过天气是真好,蓝天白云,阳光明媚. 前几天北京天空呈现出超美的云彩,专家称这是「卷积云」. 「卷积云」这似乎 ...

  4. 九、(机器学习)-Tensorflow算法之全连接层

    Tensorflow,cnn,dnn中的全连接层的理解 上一篇我们讲了使用cnn实现cifar10图像分类,模型经过隐藏层中的卷积.归一化.激活.池化之后提取到主要的特征变量,就会到全连接层,那么全连 ...

  5. 卷积神经网络中卷积层、池化层、全连接层的作用

    1. 卷积层的作用 卷积层的作用是提取输入图片中的信息,这些信息被称为图像特征,这些特征是由图像中的每个像素通过组合或者独立的方式所体现,比如图片的纹理特征,颜色特征. 比如下面这张图片,蓝色框框住的 ...

  6. 卷积神经网络、比较MLPS和CNNS、滤波器、CNN各层的作用、在Pytorch可视化CNN

    1.33.卷积神经网络 1.33.1.卷积 和 神经网络 1.33.1.1.比较MLPS和CNNS 1.33.1.2.计算机如何看图像? 1.33.1.3.建立自己的滤波器 1.33.2.完整的卷积神 ...

  7. 卷积神经网络CNN要点:CNN结构、采样层、全连接层、Zero-padding、激活函数及Dropout

    CNN结构: 卷积层:特征提取: 采样层:特征选择: 全连接层:根据特征进行分类. 采样层(pooling): max-pooling:克服卷积层权值参数误差: average-pooling:克服卷 ...

  8. 卷积神经网络卷积,池化,全连接--笔记01

    1.图像是由像素构成的,每个像素又是由颜色构成的 假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数! 1000×1000×3=3,000,000 卷积神经网络 - CNN ...

  9. C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析...

    之前的博文中已经将卷积层.下採样层进行了分析.在这篇博文中我们对最后一个顶层层结构fully_connected_layer类(全连接层)进行分析: 一.卷积神经网路中的全连接层 在卷积神经网络中全连 ...

最新文章

  1. python写错了怎么更改-使用Python修改文件内容后如何保存更改
  2. FCKeditor所有版本任意文件上传缺陷
  3. Beef加载MSF插件
  4. css3背景、边框、和补丁相关属性
  5. vue 组件不受全局样式影响_组件库引入全局样式lib/style/index.css,会污染全局基础样式...
  6. python 编译 pyc
  7. Stable Region Correspondences Between Non-Isometric Shapes
  8. linux shell编程文本处理命令grep
  9. 笔记本win7共享WIFI
  10. wallpaper怎么导入视频_vwallpaper2来电视频使用教程
  11. 推荐几款主流好用的远程终端连接管理软件
  12. 具名元组的使用方法总结
  13. Ubuntu系统下打开chm文件
  14. 博客网页代码块渲染-显示行号,一键复制,全屏显示,mac风格(基于mavon-editor或wangEditor)
  15. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
  16. 吐血规劝!程序员防猝死终极指南
  17. wiringPi库与bcm_2835区别
  18. HTML5期末大作业:关于餐饮美食网站设计——香港美食介绍(8页) HTML+CSS+JavaScript 大学生毕设网页设计源码HTML 实训大作业HTML
  19. AutoCAD中(横断面)多义线节点序号标注方法
  20. Android全球定位系统GPS距离计算-刘宇

热门文章

  1. 学姐写毕业论文,图表在PDF上,复制下来格式全乱,头疼了一晚,幸亏有我
  2. win10控制3D对象、视频等七个文件夹的显示与否
  3. 世界坐标系和图像坐标系的对应关系
  4. Xshell 常见使用
  5. 数字信号处理——振动篇
  6. C# 如何关联键盘按钮 (KeyChar/KeyCode值 KeyPress/KeyDown事件 区别)
  7. HJY-E2B/4J、HJY-91A/8J电压继电器
  8. 有关计算机病毒的说法中正确的是,以下有关计算机病毒的说法中,正确的是()。A.计算机病毒是一些人为编制的程序B.计算机病毒具有隐蔽...
  9. Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check
  10. 能力素质有所欠缺_心理素质要怎么锻炼?