百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-06 22:12 11 浏览 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等完全不同,那么你就要多培养你的层并冻结一些低级层。

PS : 本文由雷锋网独家编译,未经许可拒绝转载!

via Adit Deshpande

相关推荐

今日精选5篇教程:用Python3带你从小白入门机器学习实战教程手册

正文1:教程标题:英伟达SuperSloMoGithub项目开放作者:英伟达教程摘要:今年6月份,英伟达发布了一份生成高质量慢动作视频的论文——《SuperSloMo:HighQual...

电子书 | 笨办法学 Python 3(笨办法学python3pdf)

本周更新了5本IT电子书资源,同时站内已经有12本Python入门方面的相关电子书,可供新手选择。1、笨办法学Python3本书是一本Python入门书,适合对计算机了解不多,没有...

Python2 已终结,入手Python 3,你需要这30个技巧

选自medium作者:Erik-JanvanBaaren机器之心编译参与:王子嘉、一鸣Python2在今年和我们说拜拜了,Python3有哪些有趣而又实用的技巧呢?这篇教程有30个你会喜欢...

Python 3 系列教程(python3.9基础教程)

Python的3.0版本,常被称为Python3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python3.0在设计的时候没有考...

Python第三课3. Python 的非正式介绍

3.Python的非正式介绍?在下面的例子中,通过提示符(>>>与...)的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每...

如何使用 Python 构建一个“谷歌搜索”系统?| 内附代码

来源|hackernoon编译|武明利,责编|Carol出品|AI科技大本营(ID:rgznai100)在这篇文章中,我将向您展示如何使用Python构建自己的答案查找系统。基本上,这...

Python 模拟微博登陆,亲测有效!(如何用python爬微博)

今天想做一个微博爬个人页面的工具,满足一些不可告人的秘密。那么首先就要做那件必做之事!模拟登陆……代码是参考了:https://www.douban.com/note/201767245/,我对代码进...

Python 驱动的 AI 艺术批量创作: 免费的Bing 绘图代码解析

这篇文章将深入分析一段Python代码,该代码利用Bing的AI绘图功能,即bing的images/create,根据用户提供的文本提示生成图像。我们将详细探讨其工作原理、代码结构、...

Python爬虫Scrapy库的使用入门?(python scrapy爬虫)

Scrapy是一个开源的并且支持高度可扩展的Python爬虫框架,主要被用来实现从网站提取数据。出现之初就是为网页抓取而设计,但是现在它也可以被用于从APIs中抓取数据或通用的Web抓取任务。Sc...

Python3 标准库概览(python标准库有什么)

操作系统接口os模块提供了不少与操作系统相关联的函数。>>>importos>>>os.getcwd()#返回当前的工作目录'C:\\Python34...

零基础入门学习Python(三):变量和字符串

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来的是...

Python读写docx文件(python读写word)

Python读写docx文件Python读写word文档有现成的库可以处理pipinstallpython-docx安装一下。https://python-docx.readthedocs.io/...

如何利用Xpath抓取京东网商品信息

前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~HTML文件其实就是由一组尖括号构成的标...

如何利用Xpath选择器抓取京东网商品信息

前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~HTML文件其实就是由一组尖括号构成的标...

python之Scrapy爬虫案例:豆瓣(python爬虫书籍豆瓣评分)

python模块之Scrapy爬虫框架...

取消回复欢迎 发表评论:

请填写验证码