卷积神经网络(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. paper 162:卷积神经网络(CNN)解析

    卷积神经网络(CNN)解析: 卷积神经网络CNN解析 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer ...

  2. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

  3. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  4. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  5. 卷积神经网络CNN总结

    从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...

  6. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

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

  7. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

  8. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

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

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

随机推荐

  1. Python语言程序设计(笔记)

    1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出.‪‬‪‬‪‬‪‬‪‬ ...

  2. springboot 配置将info、error、debug 分别输出到不同文件

    在resource下创建名为 logback-spring.xml 的配置文件,内容如下: <?xml version="1.0" encoding="UTF-8& ...

  3. 1669 DINIC+二分

    题意:       给你一些名单,和每个名单可以放在哪个分组里,现在要求你把所有的人都分到一个他属于的分组(之一),然后问你分组中最多的那个人数最少是多少... 思路:      二分最多的最少,然后 ...

  4. POJ1422 最小路径覆盖

    题意:      一个战场,往战场上投放伞兵,每个伞兵不能后退,只能往前走,问你最少多少个伞兵可以吧所有的点都占领. 思路:      这个题是最小路径覆盖,最小路径覆盖 = n - 最大匹配数,首先 ...

  5. 路由器逆向分析------MIPS系统网络的配置(QEMU)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69378333 MIPS系统网络的配置  使用QEMU 模拟正在运行的MIPS系统并 ...

  6. LA3971组装电脑

    题意:       你有b块钱,想要组装一台电脑,给你提供一些零件,每种零件提供一个或几个,组装电脑的前提是每种零件只能也必须选择一个,每种零件都有自己的种类,名字,价格,还有品质,要求是在能配成电脑 ...

  7. HTTP1.0,1.1,2.0,HTTPS

    HTTP1.0/1.1/2.0/HTTPS HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页 ...

  8. maven下载Oracle jar包

    Oracle的jar包由于是收费的,所以当我们使用maven去下载时下载不下来,对于这种情况,可以用以下方式去处理: oracle官网下载应用地址:https://www.oracle.com/dow ...

  9. 学javaweb 先学Servlet 应用理论很重要

    package cn.Reapsun.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...

  10. (10)MySQL进阶篇SQL优化(InnoDB锁-间隙锁)

    1.概述 当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁:对于键值在条件范围内但并不存在的记录,叫做"间隙(GAP)&quo ...