深度学习小白,有任何问题请不吝赐教。

卷积神经网络(CNN)

CNN的构成

卷积层

卷积层负责提取图像中的局部特征

卷积层主要有很多个卷积核组成,这些卷积核也叫过滤器,每一个卷积核都代表一种模式或特征,卷积核是有深度的

卷积操作

一个公式

暂时不用看,一会儿回来对照一下
Doutput=Dinput−Dkernel+2∗paddingstride+1D_{output} = \frac{D_{input}-D_{kernel}+2*padding}{stride}+1 Doutput​=strideDinput​−Dkernel​+2∗padding​+1

两个操作

局部关联、滑动窗口

​ 黄色区域代表滑动窗口

假如图片channel维度为3,卷积核的个数为10,那么卷积核的深度亦为3,最终输出的channel维度为卷积核的个数

图片和第一个卷积核在每一个维度都进行上述的运算,得到3个特征图,然后将3张特征图对应位置相加得到最终的特征图。

剩下的每个卷积核与图片进行这样的操作都会得到一张特征图,最终组合到一起得到3x3x10的输出

即5x5x3 卷积 10个3x3x3 = 3x3x10

三种卷积
valid卷积

valid卷积指定padding为0对原图进行下采样,经过valid卷积后图片尺寸减小

full卷积

full卷积指定padding=kernel_size-1对原图进行上采样,经过full卷积后图片尺寸增大

same卷积

same卷积保持特征图尺寸不变。padding,stride需要满足这个公式
n=n−Dkernel+2∗paddingstride+1n = \frac{n-D_{kernel}+2*padding}{stride}+1 n=striden−Dkernel​+2∗padding​+1

池化层

池化层用来大幅降低参数量级(降维)

池化操作

池化操作指定一个大小的区域,区域中的所有像素值加起来取平均或者直接返回最大的值

卷积神经网络中降维一般使用maxpooling,后面会讲为什么可以降维,以及为什么使用maxpooling降维

全连接层

全连接层类似传统神经网络的部分,用来输出想要的结果。

结构图

​ 李宏毅深度学习教程课件

CNN和DNN的区别

卷积神经网络和全连接网络的本质区别就是下面两个特性

  • 局部感知
  • 权值共享

这两个特点是由于输入的特性决定的,但同时这两个特点极大降低了整个网络的参数量

对于一张图片而言,我们常常不需要看整张图片来判断图片上有什么物体,我们只需要一块小的可以代表这个物体的特征区域即可,这是卷积神经网络适用的前提。

我们另外引入一个概念,叫做感受野

对于DNN来说没有感受野的概念,或者说对于DNN的每个神经元,它的感受野都是全图

对于CNN来说,每个神经元由哪块原图中的区域决定,这块区域就是它的感受野

如下图,对于第一个神经元3来说,image左上角的3x3区域就是它的感受野

另外,一张图片上不同位置的相同特征,对于这张图片传递的信息来说,大多跟位置无关。我们当然希望使用同一组权重可以提取不同位置的相同特征。这就是权值共享。

总的来说,全连接网络前向传播的过程中永远考虑到整张图片的信息,而卷积神经网络每次采样都只考虑局部特征。理论上说,全连接网络保留了所有信息,但是层中每一个神经元都要考虑全部的信息,导致不堪重负,训练不起来。

而卷积神经网络主动对信息进行了区域划分,每一个神经元只负责一个小区域的信息,逐步抽象,直到最后才把高度精炼的信息整合起来。

几个问题

  • 全连接网络丢失了空间信息吗
  • 为什么卷积可以提取特征
  • 为什么池化层使用maxpooling而不是average-pooling

第一个问题。我以为是没有丢失的,只是难以训练罢了

第二个问题。我在深度学习与目标检测这本书中看到有这么一段话

“在深度神经网络的具体应用中,往往有多个卷积核,我们可以认为,每一个卷积核代表了一种图像模式,如果某个图像块与此卷积核进行卷积后输出的值很大,则认为此图像块十分接近此卷积核”

关于为什么现在还不太明白,我姑且认为这是对的,并以此做一些推断。即当图片经过一个卷积层之后,较大的值就认为是特征区域抽象出来的特征值。

第三个问题。在第二个问题的假设下,我们得知很有价值的特征点的值都比周围区域的值大,那么我们通过一个maxpooling层后不会影响到这个大的点,只会丢弃一些没有那么重要的值,从而起到降维的目的而保留特征。但是如果使用average-pooling将我们认为重要的特征值跟旁边不重要的特征值做了平均,显然是降低了特征值对输出的影响。

至于average-pooling的用途,以后再来补充

参考文献

一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)- 产品经理的人工智能学习库 (easyai.tech)

李宏毅2020机器学习深度学习(完整版)国语_哔哩哔哩_bilibili

一个小白对卷积神经网络的理解相关推荐

  1. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

    Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但 ...

  2. 构建一个简单的卷积神经网络,使用DRL框架tianshou匹配DQN算法

    在之前的文章中,我们做了如下工作: 如何设计一个类flappy-bird小游戏:[python实战]使用pygame写一个flappy-bird类小游戏 | 设计思路+项目结构+代码详解|新手向 DF ...

  3. 神经网络通俗理解和理解,卷积神经网络通俗理解

    通俗易懂:彻底明白什么是神经网络 想象一个黑箱子,你给它输入(样本),它给你输出(实际输出),但是输出和你想要的结果有偏差,于是你事先告诉它你想要的结果(期望输出),它做一些调整(调整内部权值和阈值) ...

  4. EEGNet:一个小型的卷积神经网络,用于基于脑电的脑机接口

    脑机接口(BCI)利用神经活动作为控制信号,可以与计算机直接通信.这种神经信号通常从各种研究充分的脑电图(EEG)信号中选择.对于给定的脑机接口(BCI)范式,特征提取器和分类器是针对其所期望的脑电图 ...

  5. 卷积神经网络可视化理解

    文章目录 设计来源 可视化第一层卷积核 可视化第一层featuremap 底层特征可视化 隐层featuremap可视化 遮挡.扰动实验 Gradient Ascent.feature inversi ...

  6. xml文件 卷积神经网络_理解卷积神经网络中的输入与输出形状(Keras实现)

    即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑.本文章将帮助你理解卷积神经网络的输入和输出形状. 让我们看看一个例子.CNN ...

  7. 图卷积神经网络(GCN)理解与tensorflow2.0代码实现

    图(Graph),一般用 G=(V,E)G=(V,E)G=(V,E) 表示,这里的VVV是图中节点的集合,EEE 为边的集合,节点的个数用NNN表示.在一个图中,有三个比较重要的矩阵: 特征矩阵XXX ...

  8. 卷积神经网络架构理解

    神经网络基础 神经网络属于优化类的数学模型.每个神经元接收到输入后,经过一些计算操作后输出一个特定的数值.这个数值经过一个激活函数(非线性的),产生这个神经元的最后输出.有很多激活函数,且绝大数已经在 ...

  9. 适合小白的卷积神经网络图解

    刚教大三学生学习深度学习的时候,学生们对卷积神经网络还比较模糊,后来我做了一个卷积神经网络课件,带很多动画,把卷积神经网络讲得比较清楚,有兴趣的同学可以看看. 文末提供原版的ppt的下载方式,ppt效 ...

  10. atm取款机的简单程序代码_LeNet:一个简单的卷积神经网络PyTorch实现

    前两篇文章分别介绍了卷积层和池化层,卷积和池化是卷积神经网络必备的两大基础.本文我们将介绍一个早期用来识别手写数字图像的卷积神经网络:LeNet[1].LeNet名字来源于论文的第一作者Yann Le ...

最新文章

  1. 如何在OS X中打印到PDF文件
  2. centos 7 卸载 mariadb 的正确命令
  3. 多模块后带来的问题解决方法 - OSGI原形(.NET)
  4. WPF效果(GIS三维续篇)
  5. weblogic12.1.3安装
  6. 摆脱困境:将属性值注入配置Bean
  7. [CodeForces332E]Binary Key
  8. mysql主从 dump线程_MySQL主从复制线程状态转变
  9. rust怎么造双层_DIY双层电路板 制作详解
  10. oracle-关于分组函数的小细节
  11. W5500连不上的问题
  12. 原创精美微信小程序UI界面——抖音版的“知乎”来啦
  13. 数字逻辑——七段数码管
  14. 最新wxid转扫一扫添加好友
  15. java使用poi读写word中的图片(二)
  16. Guitar Pro8苹果mac最新版本下载安装教程
  17. unity 上架google play 包体超过150M
  18. 以太网(802.3)帧格式
  19. SQL执行报错The MySQL server is running with the read-only
  20. Symmetric Eigenvalue Decomposition

热门文章

  1. C#实现--单链表(链式)
  2. 【数据结构】1、零碎知识点集合
  3. javascript 忍者秘籍读书笔记(二)
  4. 51-nod(1443)(最短路)
  5. 现代软件工程个人作业进度
  6. bootstrap源码学习:辅助(1)
  7. Android学习笔记之Broadcast Receiver
  8. 题目1088:剩下的树(小端快排+大端判断边界)
  9. Linux操作系统中GDB工具常见用法(二)
  10. 【LeetCode】347-前K个高频元素