卷积神经网络(CNN,ConvNet)
卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的。在短时间内,变成了一种颠覆性的技术,打破了从文本、视频到语音等多个领域所有最先进的算法,远远超出了其最初在图像处理的应用范围。

CNN 由许多神经网络层组成。卷积和池化这两种不同类型的层通常是交替的。网络中每个滤波器的深度从左到右增加。最后通常由一个或多个全连接的层组成:

图 1 卷积神经网络的一个例子

Convnets 背后有三个关键动机:局部感受野、共享权重和池化。

局部感受野
如果想保留图像中的空间信息,那么用像素矩阵表示每个图像是很方便的。然后,编码局部结构,将相邻输入神经元的子矩阵连接成属于下一层的单隐藏层神经元。这个单隐藏层神经元代表一个局部感受野。请注意,此操作名为“卷积”,此类网络也因此而得名。

当然,可以通过重叠的子矩阵来编码更多的信息。例如,假设每个子矩阵的大小是 5×5,并且将这些子矩阵应用到 28×28 像素的 MNIST 图像。然后,就能够在下一隐藏层中生成 23×23 的局部感受野。事实上,在触及图像的边界之前,只需要滑动子矩阵 23 个位置。

定义从一层到另一层的特征图。当然,可以有多个独立从每个隐藏层学习的特征映射。例如,可以从 28×28 输入神经元开始处理 MNIST 图像,然后(还是以 5×5 的步幅)在下一个隐藏层中得到每个大小为 23×23 的神经元的 k 个特征图。

共享权重和偏置
假设想要从原始像素表示中,获得移除与输入图像中位置信息无关的相同特征的能力。一个简单的直觉就是,对隐藏层中的所有神经元使用相同的权重和偏置。通过这种方式,每层将从图像中学习到独立于位置信息的潜在特征。

理解卷积的一个简单方法是,考虑作用于矩阵的滑动窗函数。在下面的例子中,给定输入矩阵 I 和核 K,得到卷积输出。将 3×3 核 K(有时称为滤波器或特征检测器)与输入矩阵逐元素地相乘,以得到输出卷积矩阵中的一个元素。所有其他元素都是通过在 I 上滑动窗口获得的:

图 2 卷积运算的一个例子:用粗体表示参与计算的单元

在这个例子中,一触及 I 的边界就停止滑动窗口(所以输出是 3×3)。或者,可以选择用零填充输入(以便输出为 5×5),这是有关填充的选择。

另一个选择是,关于滑窗所采用的滑动方式的步幅。步幅可以是 1 或大于 1。大步幅意味着,核的应用更少,以及更小的输出尺寸,而小步幅产生更多的输出并保留更多的信息。

滤波器的大小、步幅和填充类型是超参数,可以在训练网络时进行微调。
TensorFlow中的ConvNet
在 TensorFlow 中,如果想添加一个卷积层,可以这样写:

参数说明如下:
• input:张量,必须是 half、float32、float64 三种类型之一。
• filter:张量必须具有与输入相同的类型。
• strides:整数列表。长度是 4 的一维向量。输入的每一维度的滑动窗口步幅。必须与指定格式维度的顺序相同。
• padding:可选字符串为 SAME、VALID。要使用的填充算法的类型。
• use_cudnn_on_gpu:一个可选的布尔值,默认为 True。
• data_format:可选字符串为 NHWC、NCHW,默认为 NHWC。指定输入和输出数据的数据格式。使用默认格式 NHWC,数据按照以下顺序存储:[batch,in_height,in_width,in_channels]。或者,格式可以是 NCHW,数据存储顺序为:[batch,in_channels,in_height,in_width]。
• name:操作的名称(可选)。

下图提供了一个卷积的例子:

图 3 卷积运算的例子
池化层
假设要总结一个特征映射的输出。可以使用从单个特征映射产生的输出的空间邻接性,并将子矩阵的值聚合成单个输出值,从而合成地描述与该物理区域相关联的含义。

最大池化
一个简单而通用的选择是所谓的最大池化算子,输出在区域中观察到的最大输入值。在 TensorFlow 中,如果想要定义一个大小为 2×2 的最大池化层,可以这样写:

参数说明如下:
• value:形状为 [batch,height,width,channels] 和类型是 tf.float32 的四维张量。
• ksize:长度 >=4 的整数列表。输入张量的每个维度的窗口大小。
• strides:长度 >=4 的整数列表。输入张量的每个维度的滑动窗口的步幅。
• padding:一个字符串,可以是 VALID 或 SAME。
• data_format:一个字符串,支持 NHWC 和 NCHW。
• name:操作的可选名称。

下图给出了最大池化操作的示例:

图 4 池化操作的一个例子
平均池化
另一个选择是平均池化,它简单地将一个区域聚合成在该区域观察到的输入值的平均值。

TensorFlow 可以实现大量的池化层,并在线提供了一个完整的列表(https://www.tensorflow.org/api_guides/python/nn#Pooling)。总之,所有池化操作不过是给定区域的汇总操作。

ConvNet总结
CNN 基本上是几层具有非线性激活函数的卷积,以及将池化层应用于卷积的结果。每层应用不同的滤波器(成百上千个)。理解的关键是滤波器不是预先设定好的,而是在训练阶段学习的,以使得恰当的损失函数被最小化。已经观察到,较低层会学习检测基本特征,而较高层检测更复杂的特征,例如形状或面部。

由于有池化层,靠后的层中的神经元看到的更多的是原始图像,因此,能够编辑前几层中学习的基本特征。

到目前为止,描述了 ConvNet 的基本概念。CNN 在时间维度上对音频和文本数据进行一维卷积和池化操作,沿(高度×宽度)维度对图像进行二维处理,沿(高度×宽度×时间)维度对视频进行三维处理。对于图像,在输入上滑动滤波器会生成一个特征图,为每个空间位置提供滤波器的响应。

换句话说,一个 ConvNet 由多个滤波器堆叠在一起,学习识别在图像中独立于位置信息的具体视觉特征。这些视觉特征在网络的前面几层很简单,然后随着网络的加深,组合成更加复杂的全局特征。

卷积神经网络(CNN,ConvNet)相关推荐

  1. c语言实现图片卷积_卷积神经网络(CNN)Python的底层实现——以LeNet为例

    本文介绍了如何使用Python从底层实现一个简单但经典的卷积神经网络结构--LeNet,并用它完成MNIST手写数字识别任务. 具体的完整代码以及代码的使用方法,可以光顾我的Github Profes ...

  2. 卷积神经网络(CNN)的参数优化方法

    积神经网络的参数优化方法--调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep L ...

  3. 深度学习:应用于机器视觉领域的卷积神经网络(CNN)简介

    1 背景介绍 深度学习是近几年的热门研究话题.深度学习受到神经学的启示,模拟人脑的认知与表达过程,通过低层信号到高层特征的函数映射,来建立学习数据内部隐含关系的逻辑层次模型.深度学习相比于一般的浅层模 ...

  4. 深度学习:卷积神经网络CNN入门

    作者:机器之心 链接:https://www.zhihu.com/question/52668301/answer/131573702 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  5. 卷积神经网络CNN究竟是怎样一步一步工作的?

    转载:https://www.jianshu.com/p/fe428f0b32c1 [透析] 卷积神经网络CNN究竟是怎样一步一步工作的? 视频地址:https://www.youtube.com/e ...

  6. 卷积神经网络CNN图解

    背景 之前在网上搜索了好多好多关于CNN的文章,由于网络上的文章很多断章取义或者描述不清晰,看了很多youtobe上面的教学视频还是没有弄懂,最后经过痛苦漫长的煎熬之后对于神经网络和卷积有了粗浅的了解 ...

  7. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...

  8. 卷积神经网络(CNN)的简单实现(MNIST)

    卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经 ...

  9. 卷积神经网络(CNN)实现CIFAR100类别分类

    卷积神经网络(CNN)实现CIFAR100类别分类 1. CIFAR100数据集介绍 这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像.,每类各有500个训练图像和100个测 ...

最新文章

  1. Numpy学习笔记(下篇)
  2. Windows Server 2008 和 Windows Vista 结合的功能更加强大
  3. Netty详解(六):Netty 编解码技术
  4. VTK:PolyData之PointLocatorVisualization
  5. python数据结构基础知识点二分查找
  6. android 开源 高斯模糊_Android实现带毛玻璃效果(高斯模糊)背景的Dialog
  7. ShardingSphere LogicSQL 的生成探索
  8. 未来,语音识别可能应用于哪些商业化场景?
  9. Vue角色的权限管理
  10. setValue:forKey of nsobject
  11. mysql多条件批量查询,且数据量大分批查询
  12. 10个要点为Joomla网站创建完善的SEO优化内容
  13. ios 模糊搜索支持首字母搜索、拼音搜索、汉字搜索
  14. CDR9 X4 才是最稳定的经典版本,但是汉字文本对齐方面还是有点欠缺
  15. 24届大三日常实习字节(抖音)后端一面 面经
  16. 了解记录管理系统RMS
  17. 环游西游看项目管理(附上项目管理工具)
  18. 《python从入门到项目实践》第六章 列表和元组 //有一个课后答案
  19. 农夫约翰修篱笆-堆排序
  20. 如何创建一个Facebook群组

热门文章

  1. debian10 chrony简单配置
  2. centos7安装JDK1.7
  3. GPT3后可考虑的方向-知识推理与决策任务及多模态的信息处理
  4. cuda安装教cudnn安装显卡问题
  5. ESLint问题记录
  6. LeetCode简单题之键盘行
  7. MindSpore特性支持类
  8. Laravel中Redis的配置和使用
  9. Mysql中的递归层次查询(父子查询,无限极查询)
  10. HTTP/HTTPS抓包工具-Fiddler