文章目录

  • 一、卷积神经网络概述
  • 二、卷积神经网络的结构
    • 1.卷积层
      • 1.1 Padding
      • 1.2 Stride
      • 1.3 多通道计算
      • 1.4 layers.Conv2D
      • 1.5 tf.nn.conv2d
    • 2.池化层
      • 2.1 池化实战
      • 2.2 upsample—上采样
      • 2.3 ReLU层—采样
    • 3.全连接层

一、卷积神经网络概述

    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它由若干卷积层和池化层组成。CNN的基本结构由输入层、卷积层(convolutional layer)、池化层(pooling layer)、全连接层及输出层构成。卷积层和池化层一般会取若干个,采用卷积层和池化层交替设置,即一个卷积层连接一个池化层,池化层后再连接一个卷积层,依此类推。由于卷积层中输出特征图的每个神经元与其输入进行局部连接,并通过对应的连接权值与局部输入进行加权求和再加上偏置值,得到该神经元输入值,该过程等同于卷积过程,CNN也由此而得名。
    卷积神经网络由多层感知机(MLP)演变而来,对于高维输入,将所有神经元与前一层的神经元实现全连接是不实际的,于是采用部分连接(局部感知)。由下图可知,连接数成倍的减少,参数也成倍的减少。


  卷积神经网络由于其具有局部区域连接、权值共享、降采样的结构特点,使得卷积神经网络在图像处理领域表现出色。卷积神经网络相比于其他神经网络的特殊性主要在于权值共享与局部连接两个方面。权值共享使得卷积神经网络的网络结构更加类似于生物神经网络。局部连接不像传统神经网络那样,第n-1层的每一神经元都与第n层的所有神经元连接,而是第n-1层的神经元与第n层的部分神经元之间连接。这两个特点的作用在于降低了网络模型的复杂度,减少了权值的数目。


    滑动窗口完成整个区域的扫描,实现了局部信息到全局信息的融合;滑动时通过权值共享(w不变)实现了参数量的不增加。在卷积神经网络中,卷积层中的卷积核(或称之为滤波器)类似于一个滑动窗口,在整个输入图像中以特定的步长来回滑动,经过卷积运算之后,从而得到输入图像的特征图,这个特征图就是卷积层提取出来的局部特征,而这个卷积核是共享参数的。在整个网络的训练过程中,包含权值的卷积核也会随之更新,直到训练完成。
    为什么卷积层会有多个卷积核呢?因为权值共享意味着每一个卷积核只能提取到一种特征,为了增加CNN的表达能力,需要设置多个卷积核。但是,每个卷积层中卷积核的个数是一个超参数。

二、卷积神经网络的结构

    卷积神经网络一般包括卷积层,池化层和全连接层。
    卷积层和池化层的共同作用使得CNN能提取出图像中较好的特征(特征提取)。卷积层的作用是提取图像的特征;池化层的作用是对特征进行抽样,降低了图像的分辨率,可以使用较少训练参数,同时还可以减轻网络模型的过拟合程度。卷积层和池化层一般交替出现在网络中,称一个卷积层加一个池化层为一个特征提取过程,但是并不是每个卷积层后都会跟池化层,大部分网络只有三层池化层。网络的最后一般为1~2层全连接层,全连接层负责把提取的特征图连接起来,最后通过分类器得到最终的分类结果。

1.卷积层

    卷积的过程就是提取特征的过程,随着卷积神经网络深度的增加,能提取到越来越高级的特征,也更接近事物的本质。一般来说,高级特征能够用在不同类别事物的分类中,而低级特征能够用于同类事物的分类。
    在卷积层中,通常包含多个可学习的卷积核,上一层输出的特征图与卷积核进行卷积操作,即输入项与卷积核之间进行点积运算,然后将结果送入激活函数,就可以得到输出特征图。每一个输出特征图可能是组合卷积多个输入特征图的值。
  卷积层l的第j单元的输出值 alj的计算公式为:

其中 ajla_{j}^{l}ajl​表示选择的输入特征图的集合,k表示可学习的卷积核。下图展示了卷积过程。

通常把卷积核k看作一个滑动窗口,这个滑动窗口以设定的步长向前滑动。这里输入图像的大小是5×5即M=5,卷积核大小为3×3即k=3,步长为1即s=1,根据卷积层输出计算公式

可以计算输出图像的大小N=3。
该卷积过程:5×5输入图像与3×3卷积核进行卷积,得到3×3的输出图像。
这样的卷积存在两个缺点:

  • 每次卷积都会导致图像尺寸的变小,如果图像很小、进行卷积的次数很多,最后可能只会剩下一个像素
  • 输入图像的矩阵边缘像素只被计算过一次,而中间像素被卷积计算多次,这就意味着丢失图像边缘信息。为了解决这两个问题,就需要对输入图像进行填充(Padding)
1.1 Padding


    输入图像矩阵周围填充一层像素,通常填充的元素为0,填充的像素数为1即P=1。边缘像素在被填充后,不再是边缘像素,可以被计算多次。输出图像中边缘像素是受输入图像边缘像素的影响,削弱了边缘信息丢失的缺点。另外,根据卷积层计算公式计算得输出卷积特征图变为5×5,与图像尺寸大小相同,解决了卷积会使图像变小的缺点。
常见的填充方式有Valid和Same填充

  • Valid填充
    不使用填充,即使用M×M的图像与k×k的卷积核相卷积,若步长为1,此时,输出为(M-k+1)
  • Same填充
    通过填充使得输出的卷积特征图尺寸与输入图像尺寸相等,此时填充宽度P=(k-1)/2,但卷积核为奇数

    在计算机视觉领域,k通常是奇数,一方面可以保证使用 Same 填充时填充像素数P是整数,对原图片的填充是对称的;另一方面奇数宽度的卷积核具有一个中心像素点,可以表示卷积核的位置。

1.2 Stride


    stride是指卷积核在输入上移动时每次移动的距离,直接上图来说明。其中按红框来移动的话stride = 1;按蓝色框来移动的话stride = 2。加入stride后,假设输入大小为M×M,卷积核大小为k×k,stride=s,padding=p,卷积层输出计算公式为

可以通过stride来完成降维操作。

1.3 多通道计算

    卷积核除了长宽这两个参数之外还有通道数这个参数,首先需要明确的是单个卷积核的通道数要等于图像的通道数,一般图像是RGB模式的话,卷积核的大小为h×w×3。只有一个卷积核的时候,图像经过卷积计算后的结果通道数是一维的,计算方法也简单粗暴。每个通道的对应位置相乘然后,不同通道数之间相加。

    一般卷积核不止一个,对于多个卷积核的情况也不复杂,直接对每个卷积核进行单个卷积核的操作,然后把它们拼在一起就行了。

1.4 layers.Conv2D



1.5 tf.nn.conv2d

2.池化层

    池化层(pooling)的作用主要是降低维度,通过对卷积后的结果进行降采样来降低维度,分为最大池化、平均池化、最小池化与随机池化。池化层比卷积层更大幅度的减少了连接个数,也就是说降低了特征的维度,从而避免过拟合,同时还使得池化输出的特征具有平移不变性。池化层利用图像局部相关的原理,对图像进行下采样,在减小数据量的同时也保留了有用的信息。


    均值池化是对所有特征点求平均值,而最大值池化是对特征点的求最大值。而随机池化则介于两者之间,通过对像素点按数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与均值采样近似,在局部意义上,则服从最大值采样的准则。

    根据Boureau理论可以得出结论,在进行特征提取的过程中,均值池化可以减少邻域大小受限造成的估计值方差,但更多保留的是图像背景信息;而最大值池化能减少卷积层参数误差造成估计均值误差的偏移,能更多的保留纹理信息。随机池化虽然可以保留均值池化的信息,但是随机概率值确是人为添加的,随机概率的设置对结果影响较大,不可估计。

2.1 池化实战

layers.MaxPool2d(2,strides=2)
第一个2表示池化框的大小为2×2,strides=2表示步长为2

2.2 upsample—上采样


2.3 ReLU层—采样


3.全连接层

    全连接层就是把卷积层和池化层的输出展开成一维形式,全连接层其实就是普通的神经网络。卷积层与池化层只会进行特征提取,并减少参数量。为了生成最终的输出,我需要全连接层来实现分类/回归任务。

参考如下文章:
卷积神经网络

从零开始搭建卷积神经网络


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!


深度学习TF—7.卷积神经网络CNN相关推荐

  1. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  2. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  3. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  4. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  5. [人工智能-深度学习-24]:卷积神经网络CNN - CS231n解读 - 卷积神经网络基本层级

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:[人工智能-深度学习-23]:卷积神经网络CNN - CS231n解读 - 卷积神经网络基本层级_ ...

  6. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  7. 深度学习 之七 【卷积神经网络 CNN】

    1.CNN的应用 了解 WaveNet 模型. 如果你能训练人工智能机器人唱歌,干嘛还训练它聊天?在 2017 年 4 月,研究人员使用 WaveNet 模型的变体生成了歌曲.原始论文和演示可以在 此 ...

  8. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点

    转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...

  9. 深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN

    本文原链接可以查看更多文章    博文01介绍了CNN的基本结构.博文02.03.04依次介绍了卷积操作.LR模型的建立及实现,MLP模型及实现.这些都是作为实现LeNet的铺垫.因为LeNet的实现 ...

  10. [人工智能-深度学习-30]:卷积神经网络CNN - 感受野,特征的提取与范围的扩散

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

最新文章

  1. 详细解析SELECT模型
  2. videocapture.read()解决内存泄露_只需4个步骤,分析解决在生产环境下JVM内存泄露问题...
  3. mysql中的编码问题_mysql存储乱码之编码问题
  4. Jenkins 流水线 获取git 分支列表_某小型公司持续集成工具 jenkins 实践
  5. Markdown_合并表格中的单元格
  6. L1-029 是不是太胖了 (5 分)—团体程序设计天梯赛
  7. 苹果Mac定制化App开发神器:FileMaker Pro
  8. 机器学习之多种算法优缺点总结及优化方法
  9. 带壳破解SMC补丁技术
  10. 在登录页面中输入正确的信息还是显示用户名或密码错误
  11. 没想到印度年轻人这么惨!我们知足吧!
  12. mvn assembly:single打包报错:Error reading assemblies: No assembly descriptors found.
  13. asp.net面试常见试题
  14. golang计算任意两点间的方位角
  15. Mysql 的基本命令合集
  16. [架构之路-179]-《软考-系统分析师》-19- 系统可靠性分析与设计 -1- 故障模型、可靠性模型、可靠性分析
  17. 【PR】零基础快速入门教程
  18. 小学计算机教师资格证笔试试题,2019上半年小学信息技术教师资格证面试试题(精选)第一批...
  19. 工作纪实_25-SpringCloud整合sentinel问题汇总
  20. Ubuntu下源码编译VirtualBox五 —— 源码编译(4)

热门文章

  1. Netsuite Foreign Currency Revaluation 外币评估
  2. CS安装卸载测试总结
  3. git 命令总结(转)
  4. 我的第一个python web开发框架(4)——数据库结构设计与创建
  5. [No000072]Windows环境变量列表
  6. 迪杰斯特拉算法dijkstra(可打印最短路径)
  7. linux 编译安装nginx,配置自启动脚本
  8. JAVA基础--JAVA中的反射机制详解(转)
  9. 使用HttpWebRequest自动更新客户端应用程序[转]
  10. Android 获取联系人列表