卷积神经网络新手指南

2016-08-01 18:06 Blake
0条评论

卷积神经网络新手指南之二

引言

本文将进一步探讨有关卷积神经网络的更多细节,注:以下文章中部分内容较为复杂,为了保证其简明性,部分内容详细解释的研究文献会标注在后。

步幅和填充

让我们看回之前的转换层,在第一部分中我们提到过过滤器、接受场。现在,我们可以通过改变2个主要参数来校正每一层的行为。在选择过滤器大小之后,我们也必须选择“步幅”和“填充”。

步幅控制着过滤器如何进行卷积。在第一部分中我们有提到一个例子,过滤器围绕输入体量通过一次移动一个单位进行卷积。过滤器移动的总量即步幅。步长通常以一个方法进行设置使输出量是一个整数,而不是一个分数。让我们看看一个例子,想象一个7×7输入体量,一个3×3过滤器(出于简化角度考虑忽略第三维度),另外还有一个步幅1。这个就是我们习惯的情况。

是不是和之前的一样?你还可以尝试猜测下当步幅增加到2,输出量会发生什么情况。

因此,正如你所看到的那样,接受场正在以2个单位进行移动,同时输出量也会减少。注意如果我们试图将我们的步幅设置为3,那么其在间距和确保接受场适合的输入量两个方面会出现问题。通常情况下,如果程序员希望接受场重叠更少以及更小的空间尺寸的话,他们通常会增加步幅。

现在我们来接着关注填充,在正式开始之前,让我们设想一个场景。当你将三个5×5×3的过滤器应用到一个32×32×3的输入体量中时会发生什么?

注意空间维度会降低。当我们持续应用卷积层时,体量的大小将减少得比我们想的快。在我们神经网络的早期层中,我们要保存尽可能多的原始输入信息,以便我们可以提取这些低阶特征。我们想要应用同样的卷积层,但我们想将输出量保持在32 x 32 x 3。要做到这个,我们可以将大小为2的零填充(zero padding)应用到该层。零填充(zero padding)在边界周围填充了值为零的输入量。如果我们考虑大小为2的零填充(zero padding),那么这将导致在一个36×36×3输入量。

如果有1的步幅并且将零填充(zero padding)的大小设置为

K是过滤器大小,输入和输出量将会一直保持同样的空间维度

对于任何给定的卷积层输出大小的计算公式

O是输出大小,K是过滤器大小,P是填充,S是步幅。

选择超参数

我们怎么确定需要用多少层、多少卷积层、过滤器的大小是什么,或者步幅和填充的值?这些都是重要的问题,并且没有一套所有的研究人员都在使用的标准。这是因为神经网络在很大程度上取决于你所拥有的数据类型。数据大小因为图像的复杂性、图像处理任务的类型以及更多因素而千差万别。当你看着自己的数据集时,选择超参数的一种方式是发现在一个适当的范围创造图像抽象的正确组合。

修正线性单元(ReLU)层

在每个卷积层后,习惯在其后马上添加一个非线性层(或激活层)。这一层的目的是将非线性引入系统,基本上是在卷积层进行线性运算(只是元素的乘法和累加)。在过去都是像tanh 或者sigmoid的线性算法,但研究人员发现ReLU层效果更好,因为网络训练速度能加快很多(因为计算效率)且精度没有显著差异。它也有助于缓解消失的梯度问题,这是因为网络训练较低层的速度非常缓慢,梯度通过不同的层级指数下降。ReLU层的采用的函数f(x)= max(0,x)所有值的输入量。基本上,这一层将所有的负激活变成了0。这一层提高了模型的非线性特性,且整体网络不影响卷积层的接受场。感兴趣的还可以参看深度学习之父Geoffrey Hinton的论文Geoffrey Hinton

 池化层(Pooling Layers)

经过一些ReLU层之后,程序员可以选择池化层,它也被称为下采样层。在这一类别中,也有几种层可供选择,但maxpooling(最大池化层)是最受欢迎的。它需要一个过滤器(通常大小2x2)和一个相同的步幅长度,然后将其应用在过滤器卷积周边每一个分区的输入和输出的最大量处。

池层的其他选项(pooling layers)还有是平均池(average pooling)和 L2-norm pooling。这层背后的原因是一旦我们知道一个特定的特性是其原始输入量(将有一个高激活值),那么其确切位置不重要的。可以想象,这一层大大降低了输入体积的空间维度(长度和宽度的变化,但不是深度)。这样做有两个主要目的,首先是参数或权重的量减少了75%,从而降低了计算成本。其次,它能够控制过度拟合。这个术语是指当一个模型针对训练例子如此调整的话,它是不能够概括验证和测试集的。过度拟合的特征是有一个模型能得到100%或99%的训练集,但只有50%的测试数据。

降层(Dropout Layers)

降层在神经网络中有一个十分特别的功能。在上一节中,我们讨论了过度拟合的问题。在训练之后,网络的权重被调整到给定的训练样本上,这样的话当给定新的样本时神经网络的表现并不好。降层这个理念在自然中过分单纯的。

降层通过在前向传播过程中将其设置为零在该层中随机“抛弃”一些激活,就是这么简单。在这个过程中这样做有什么好处呢?在某种程度上,它迫使网络变成“多余”的。即使一些激活在过程中被抛弃,神经网络也应该能够对特定样本提供正确的分类或者输出。它确保网络对于训练数据不会过于“合适”,从而有助于缓解过度拟合的问题。重要的一个这一层只在训练过程中使用,而不是在测试中。

网络层网络

网络层网络指的是一个使用1 x 1大小的过滤器的卷积层。现在,第一眼你可能会想知道为什么这种类型的层会有帮助,因为接受场通常是大于他们映射空间的。然而,我们必须记住这些1x1卷积跨度有一定的深度,所以我们可以认为它是一个1 x 1 x N的卷积,其中N是该层中过滤器应用的数量。实际上这层是执行一个N-D 元素级的相乘,其中N是输入量成层深度。

分类,定位,检测,分割

在这节中我们使用第一部分曾提到过的例子,来看一下图像分类任务。图像分类任务是将输入图像识别并输入一系列的图像类别的过程,然而当我们将对象定位作为任务时,我们的工作不仅是得到一个分类标签,另外还需要划定一个对象在图像中的范围。

同样还有对象检测任务,需要将图像中所有对象进行图像定位任务。因此,在图像中将会有多个划定范围还有多个分类标签。

最后,还有对象分割任务,对象分割任务指的是输出一个类的标签,以及输入图像中的每一个对象的轮廓。

迁移学习(Transfer Learning)

目前在深度社区的一个常见的误解是:没有谷歌那样的数据量的话,不可能建立一个有效的深度学习模型。虽然数据确实是创建神经网络的一个重要组成部分,但是迁移学习的理念能够有助于减少数据的需求。迁移学习是经过一个预先训练的模型(网络的权重和参数已通过一个大数据集或者别人训练),并且用你自己的数据集进行“微调”的过程。这个理念就是预先训练的模型将作为一个特征提取器,将网络的最后一层删除并用自己的分类器替换它(取决于您的问题空间)。然后冻结所有其他层的权重,并正常训练网络(冻结层意味着在梯度下降/优化过程中能够不改变权重)。

让我们来弄清楚为什么这样会有用,举例来说我们在ImageNet上的预先训练模型(ImageNet是一个数据集,包含超过1000类的1400万幅图像)。当我们考虑网络的低层时,我们知道他们会检测到边缘和曲线等特征。现在除非你有一个非常独特的问题空间和数据集,你的网络也会需要检测曲线和边缘。与其通过一个随机初始化的权重来训练整个网络,我们可以使用预先训练的(并冻结)模型的权重,并专注于更重要的(更高的)层级的训练。如果你的数据集与ImageNet等完全不同,那么你就要多培养你的层并冻结一些低级层。

卷积神经网络新手指南 2相关推荐

  1. 卷积神经网络新手指南之二

    导语:本文将进一步探讨有关卷积神经网络的更多细节. 卷积神经网络新手指南之二 引言 本文将进一步探讨有关卷积神经网络的更多细节,注:以下文章中部分内容较为复杂,为了保证其简明性,部分内容详细解释的研究 ...

  2. 卷积神经网络(CNN)新手指南

    导语:带你了解近年来相当火爆的卷积神经网络(Convolutional Neural Network,CNN) 卷积神经网络(Convolutional Neural Network,CNN)新手指南 ...

  3. 卷积神经网络(CNN)新手指南 1

    卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 卷积神经网络(Convolutional Neural Network,CNN)新手指南 引言 卷积神经网络:听 ...

  4. [转载] 卷积神经网络做mnist数据集识别

    参考链接: 卷积神经网络在mnist数据集上的应用 Python TensorFlow是一个非常强大的用来做大规模数值计算的库.其所擅长的任务之一就是实现以及训练深度神经网络. 在本教程中,我们将学到 ...

  5. 卷积神经网络之卷积计算、作用与思想 深度学习

    博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...

  6. 卷积神经网络通俗解读

    转载自:https://blog.csdn.net/dong_lxkm/article/details/80575207 一.前言 最近一直在研究深度学习,联想起之前所学,感叹数学是一门朴素而神奇的科 ...

  7. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

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

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

  9. 3层-CNN卷积神经网络预测MNIST数字

    3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...

最新文章

  1. python reader循环_python – 多次循环遍历csv.DictReader行
  2. 【转】txt中导入数据,matlab画图问题
  3. 【动态数组】数据结构01-(java实现)
  4. android SharedPreferences的使用优化
  5. Python 的 sys 模块常用方法
  6. golang 结构体 slice 排序
  7. Fansblog(HDU-6608)
  8. mysql 数据操作 多表查询 子查询 带比较运算符的子查询
  9. 双11尾款人的续命丸哪里找?送3本精神食粮助你快速回血
  10. 手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
  11. 学以致提高学生操作计算机能力,学用结合,学以致用
  12. 大数据系列 | 阿里云datav数据可视化(使用json文件生成可视化动态图标)
  13. 基础体温软件测试,[快乐备孕][备孕攻略]使用基础体温测量软件,志在必得的备孕...
  14. 用记事本编写ajax,用记事本轻松制作ajax+xml在线聊天室
  15. JavaScript数据类型、引用类型、操作符、语句
  16. 虚拟现实制陶制作方法对中学生创造力和学习参与度的影响
  17. OpenCV实现简单的录屏功能
  18. 利用window.location实现下载文档
  19. pip 下载安装包及依赖包 并安装
  20. 一文教你掌握广义估计方程

热门文章

  1. COMMUNITY SERVER 的架构分析
  2. redis 永不过期 java_死磕 Java
  3. 2021长安二中高考成绩查询,长安一中、长安二中,2017年高考上线喜报!
  4. SQLServer数据库的表管理
  5. 设计模式(结构型模式)——享元模式(Flyweight)
  6. iOS序列化与反序列化
  7. Ubuntu+PHP+Apache+Xdebug 使用方法
  8. 轻量级数据持久层Seaking.PL简介及建议征集
  9. 移植uboot第十步:制作uboot补丁
  10. 小技巧 —— linux中怎么简单的复制5000个数字