手把手教你理解卷积神经网络

摘要: 卷积神经网络是一种识别和理解图像的神经网络。本文将从不同的层次来介绍卷积神经网络。

    手把手教你理解卷积神经网络(一)

         本文将继续为你介绍关于卷积神经网络的知识。为了保持文章的简洁性和全面性我将为你提供研究论文的链接,里边会有更为详细的解释。

确定宽度和填充(Stride and Padding)

让我们看看转换层,还记得滤波器、接受域和卷积吗?现在我们可以改变两个主要参数来修改每层的运行状态。在选择滤波器大小之后,还要选择宽度和填充。

用宽度来控制滤波器如何在输入量的上下范围内进行卷积。例如,一个7*7的输入量,一个3*3的滤波器(忽略第三维度的简单性),宽度为1。

 

看看你是否能尽力猜出随着宽度增加到2,输出量会发生什么变化。

 

因此,正你所看到的那样,接受域现在在两个单元之间来回变换,并且输出体积也缩小了。请注意,如果我们试图将宽度调整为3,那么我们就有间隔的问题了,还要确保接受域适合输入量。通常来说,开发者如果希望接受域重叠较少,并且希望有较小的空间维度,则会增大宽度。


让我们看看填充部分,但是在开始之前,让我们考虑一个场景。当你把三个5*5*3的滤波器应用到一个32*32*3的输入量时会发生什么呢?输出量会是28*28*3。注意,空间维度减少了。当我们保持应用转换层时,输出量的大小将比我们想象的减少的快。在我们网络的前面的那些层中,我们想尽可能多地保存原始输入量的信息,这样我们就可以提取那些低级的特性了。这样说吧,我们想应用同样的转换层,但想要的输出量要保持在32 x 32 x 3。要做到这一点,我们可以对该层应用一个大小为2的零填充。零填充在边界上以零为输入的量。如果我们考虑两个中的一个零填充,那么这将会导致一个36*36*3的输入量。

 

如果你有一个为1的宽度,并且你把零填充的大小设置为:


当滤波器的大小为K时,输入量和输出量将始终具有相同的空间维度。

对于任何给定的转换层的输出量的计算公式是:


上面的公式中,O是输出的高度/长度,W是输入的高度/长度,K是滤波器的大小,P是填充,S是宽度。


选择参数(Choosing Hyperparameters)


我们如何知道用了多少层,有多少转换层,滤波器的大小是多少,或者宽度和填充是什么值呢?这些问题我们都不知晓,因为网络将在很大程度上依赖于你的数据类型。数据可以根据大小、图像的复杂度、图像处理任务的类型以及更多的不同因素而变化。当看着你的数据集时,一个考虑如何选择参数的方式是在一个适当的规模找到正确的创建图像抽象的组合。


ReLU (被调整的线性单元)层

在每个转换层的后面,就是常规的应用非线性层(或激活层)。这一层的目的是非线性地引入一个系统,这个系统基本上是在转换层一直计算线性操作(只是元素方式的乘法和加法运算)。


在之前,一直用的是非线性函数,如tanh和sigmoid,但研究人员发现ReLU层的效率远远更好,这是因为在对精度没有产生显著不同的情况下,网络能训练的更快(因为计算效率更高)。它也有助于缓和消失梯度的麻烦,这是一个问题,因为较低层的网络训练是非常缓慢的,因为在这些层里梯度呈指数级别的下降层(解释这个问题可能超出了本文的范围,点击这里这里来查看具体的解释和描述)。ReLU层调用函数f(x)= max(0,x)来提供输入量的所有值。基本上来说,这一层刚好改变所有的负激活为0。这一层在不影响转换层的接受域的情况下,提高了模型和整个网络的非线性的属性。


池化层Pooling Layers


经过一些ReLU层,开发者可以选择应用一个池化层,它也被称为缩减采样层。在这一类别中,也有其它几个层的选择,与最大池化(maxpooling)一起是最受欢迎的。这基本上需要一个滤波器(通常大小为2*2)和相同尺寸的宽度。然后将其应用于输入量和在每个有滤波器卷积的子区域中输出的最大数量。

 

池化层的其他选项是平均池化和L2-norm池化。这个层背后的直观理解是,一旦我们知道一个特定的特征是在原始输入量中(将会有一个高激活值),它的确切位置并不像它相对于其它特征的位置那么重要。可以想象,这一层极大地减少了输入量的空间维度(长度和宽度的变化,而不是深度)。这有两个主要目的。首先,参数或权重的数量减少了75%,从而降低了计算的成本。其次,它将控制过度拟合,这指的是当一个模型被调整到训练样本时,它不能很好地为验证和测试集进行标准化。过度拟合的表现是,有一个模型,在训练集上得到100%或99%的表现,但在测试数据上只有50%。


Dropout Layers

现在,Dropout Layers在神经网络中有一个非常特殊的功能。在上一节中,我们讨论了过度拟合的问题,训练结束后,网络的权重被调整到了已给的训练样本,当提供了新的训练样本时网络就执行的不那么好了。Dropout的想法在本质上是过于简单化的。这一层“删除”一个随机激活集,通过将它们设置为零。即使某些激活被删除了,网络也应该能够为特定的样本提供正确的分类或输出。它确保网络变得不“适合”训练数据,从而有助于缓解过度拟合的问题。一个重要的注意事项是,这一层仅用于训练期间,而不是在测试期间使用。


网络层的网络(Network in Network Layers)

网络层的网络指的是一个应用1 x 1大小的滤波器的转换层。首先,既然接受域通常要比它们映射到的空间大,你可能想知道为什么层的类型会有帮助。然而,我们必须记住,这些1x1卷积的跨度是有一定深度的,所以可以认为它是一个1 x 1 x N的卷积,其中N是滤波器在这一层中应用的数量。


分类、定位、检查、分割(Classification, Localization, Detection, Segmentation


当我们执行一个类似于对象本地化这样的任务时,不仅仅是生成一个类标签,还包括一个用来描述对象在图片中位置的包围盒(bounding box)。

 

我们也有对象检测的任务,需要对图像中的所有对象进行定位。因此,将有多个包围盒和多个类标签。

最后,我们还进行了对象分割,其中的任务是输出一个类标签以及一个输入图像中每个对象的轮廓。

 

迁移学习(Transfer Learning)


现在,在深度学习社区的一个常见的误解是:没有超大的数据量,你不可能创建有效的深度学习模型。数据固然是创建网络的关键部分,但也不是决定部分迁移学习的思想有助于减少数据需求。迁移学习是接受预训练模型(由其他人在大数据集上训练过的网络的权重和参数)并用自己的数据集对模型进行“微调”的过程。这个想法是这个预先训练的模型将作为一个特征提取器。你将删除网络的最后一层,并用自己的分类器来代替。然后冻结所有其它层的权重,并正常地训练网络(冻结这些层意味着在梯度下降/优化过程中不改变权重)。


我们正在探讨的是预训练模型在ImageNet上训练(ImageNet是一个数据集,在1000以上个类里包含1400万幅图像)。当考虑网络上那些较低的层时,我们知道它们将检测到像边缘和曲线这样的特征。现在,除非你有一个非常独特的问题空间和数据集,你的网络也将需要检测曲线和边缘。与其通过一个随机的权重初始化值来训练整个网络,我们可以使用预训练模型的权重,并致力于在更重要的层(更高的层)上进行训练。如果你的数据集与ImageNet完全不同,那么你就要训练更多的层并冻结两个较低的层。


数据扩展技术(Data Augmentation Techniques)

现在,我们可能对数据在卷积神经网络中的重要性没什么感觉了,因此让我们谈论一下让你的数据集变大的方法,仅仅是用两个简单的变换。正如我们前面提到过的,当计算机用一个图像作为输入时,它将输入一个像素值的数组。假设整个图像被左移1个像素。对你和我来说,这个变化是潜移默化的。然而,对于一个计算机来说,这一改变可能相当地重要,因为图像的分类或标签不会改变,而数组改变了。以改变数组表示的方式改变训练数据的方法,同时保持标签相同,称为数据扩展技术。这是一种人工扩展数据集的方法。人们使用的一些流行的扩展是灰度、水平翻转、垂直翻转、随作物、色恐慌、平移、旋转等等。通过将其中的两个转换应用到训练数据中,你就可以轻松地将训练样本的数量扩大一倍或三倍。

 以上为译文。

文章原标题《A Beginner's Guide to Understanding Convolutional Neural Networks》,

译者:Mags,审校:袁虎。

原文链接

干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作流实战_09_flowable 流程实例挂起与激活

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,我师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都…

2018深圳云栖拉开帷幕,飞天技术汇五大专场邀你参加~

摘要: 感受万物互联的智能时代,洞察数字化转型的全新未来。云栖大会将情景化展示智能城市、智能生活、智能制造、智慧门店等阿里云IoT生态全景,20专场,覆盖AI、新零售等全行业数字化转型解决方案。 飞天技术汇作为阿里云的技术传播…

学了阿里中台,却依然做不好系统? 聊聊阿里的项目管理

戳蓝字“CSDN云计算”关注我们哦!作者 | 墨玖来源| 阿里技术导读:在技术公司、尤其是互联网公司,技术人员作为PM(项目经理)是非常常见的。有些同学得心应手,有条不紊,能得到清晰稳定的预期结果;有些同学则…

视频直播常见问题与解决办法汇总【系列三—直播推流】

摘要: 直播推流初始化设置 要进行直播推流,您必须开启直播加速 > 配置直播域名 > 直播推流,详情参考 快速开始。 如何获取推流地址 直播加速配置成功后,您可以通过以下方式获取对应的推流地址。 登录 视频直播控制台。 直播…

工作流实战_10_flowable 流程实例的删除

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码2.1. 删除实例命令2.2. 执行删除动作1. 演示 …

深入了解机器学习

摘要: 了解机器学习发展史、机器学习是什么?机器学习有什么?看看本文就够了。如今机器学习已经成为了这个时代的热门话题。机器学习已经存在了几十年,但直到最近我们才得以利用这项技术。接下来,让我们一起回顾一下机器…

python程序设计的基本步骤_Python程序设计课程教与学(54、72、80学时教学大纲)...

原标题:Python程序设计课程教与学(54、72、80学时教学大纲)《算法与程序设计》课程教学大纲 Programming and Algorithm Fundamentals (Python-based) 一.基本信息 课程学分:4 ; 面向专业:计算机…

百分点10周年乔迁新址 数据智能服务更上一层楼

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹2019年8月,是百分点值得纪念和庆祝的日子,随着百分点团队的迅速扩大与蓬勃发展,全国各地业务开展的有声有色,业绩快速增长,在企业成立十周年之际,更…

用Python及深度学习实现iPhone X的FaceID功能

摘要: 本文主要是展示FaceID解锁机器的基本工作机制,采用的方法是基于人脸映射和孪生卷积神经网络,Github上附详细代码。对于果粉们来说,对新出的iPhone X讨论最多的是其解锁方式,TouchID的继承者——FaceID。对于新一…

工作流实战_11_flowable 流程实例 跟踪流程

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码分享1. 演示 2. 代码分享 public byte[] cre…

企业如何采用机器学习

摘要: 向机器学习专家学习如何理解机器学习开发生命周期,以及如何建立一个团队通过机器学习来解决他们的业务问题。毫无疑问,任何企业都可以利用机器学习的优势将机器学习应用到他们的业务过程中。而机器学习的意义将取决于它是如何被应用的&…

Spark精华问答 | spark的组件构成有哪些?

戳蓝字“CSDN云计算”关注我们哦!Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第一代产品使用HDFS,第二代加入了Cache来保存中间计算结果&#xf…

binlog日志_mysql 重要日志文件总结

日志是所有应用的重要数据,MySQL 也有错误日志、查询日志、慢查询日志、事务日志等。本文简单总结下各种日志,以备查阅。二进制日志 binlog二进制日志 binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。使…

Python数据预处理:使用Dask和Numba并行化加速

摘要: 本文是针对Python设计一种并行处理数据的解决方案——使用Dask和Numba并行化加速运算速度。案例对比分析了几种不同方法的运算速度,非常直观,可供参考。如果你善于使用Pandas变换数据、创建特征以及清洗数据等,那么你就能够…

工作流实战_12_flowable 流程实例 终止流程

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码分享1. 演示 2. 代码分享 public ReturnVo&l…

让运维更高效:关于ECS系统事件

摘要: 阿里云会针对ECS实例发布系统事件,当您收到阿里云计划维护的通知时,可以利用ECS系统计划事件了解与实例相关的计划维护操作,并根据您的业务特性选择合适的时间安排运维操作进行故障转移,减少对系统可靠性和业务连…

工作流实战_13_flowable 待办任务列表查询

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码分享1. 演示 2. 代码分享 这里我使用的sql查…

openlayer xyz加载_webGIS实践:3_1_openlayer展绘点线面注记

上一篇已经讲了&#xff0c;怎么加载瓦片地图。这篇就看看怎么简单的渲染矢量点线面数据。最简单的&#xff0c;绘制点线面注记。效果长这样&#xff1a;新建一个文件FeatureOL.HTML。代码如下&#xff1a;<!DOCTYPE html> <html lang"en"> <head>…

反转了!“只问了1个框架,就给了35K的Python岗”

Python还有“敌人”吗&#xff1f;最近网络上一则帖子吸引了笔者&#xff0c;大意内容为&#xff1a;据说A是有2年多经验的Python工程师&#xff0c;面一个公司相关的岗位&#xff0c;由于人手紧缺&#xff0c;所以只问了一个框架&#xff0c;就按笔者提的35K办理了入职。&…

用深度学习解决Bongard问题

摘要&#xff1a; 本文介绍了深度学习和Bongard问题&#xff0c;以及如何用深度学习更好的解决Bongard问题。Bongard问题是苏联计算机科学家Mikhail Bongard提出的。从20世纪60年代&#xff0c;他致力于研究模式识别&#xff0c;并且设计了100个这样的谜题&#xff0c;使之成为…