您好、欢迎来到现金彩票网!
当前位置:秒速牛牛官方网站 > 调试模型 >

构建深度学习模型的基本技巧

发布时间:2019-07-17 09:36 来源:未知 编辑:admin

  。它确实很有效,相对于较传统的优化器(如原版梯度下降),我们更喜欢使用 ADAM。在 TensorFlow 环境下使用 ADAM 时,请注意:如果你想要保存和恢复模型权重,请记住在设置完 AdamOptimizer 后设置 Saver,这是因为 ADAM 也有需要恢复的状态(即对应于每个权重的学习率)。 也可以结合

  ReLU是最好的非线性(激活函数),它们在工作时梯度并不会逐渐减小(从而能够防止梯度消失)。尽管 sigmoid 是一个常用激活函数,但是它在 DNN 中传播梯度的效果并不太好。

  不要在输出层使用激活函数。这应该是显而易见的,但是如果你通过一个共用的函数构建每一层,那这可能是一个很容易犯的错误:请确保在输出层不要使用激活函数。

  为每一层添加一个偏置项。这是机器学习的入门知识:本质上,偏置项将一个平面转换到最佳拟合位置。在 y=mx+b 式中,b 是偏置项,使直线能够向上或向下移动到最佳的拟合位置。

  使用方差缩放初始化。在TensorFlow中,该方法写作。根据我们的实验,这种初始化方法比常规高斯分布初始化、截断高斯分布初始化及 Xavier 初始化的泛化/缩放性能更好。粗略地说,方差缩放初始化根据每一层输入或输出的数量(在 TensorFlow 中默认为输入的数量)来调整初始随机权重的方差,从而帮助信号在不需要其他技巧(如梯度裁剪或批归一化)的情况下在网络中更深入地传播。Xavier和方差缩放初始化类似,只不过Xavier中每一层的方差几乎是相同的;但是如果网络的各层之间规模差别很大(常见于卷积神经网络),则这些网络可能并不能很好地处理每一层中相同的方差。

  白化(归一化)输入数据。在训练中,令样本点的值减去数据集的均值,然后除以它的标准差。当网络的权重在各个方向上延伸和扩展的程度越小,你的网络就能更快、更容易地学习。保持数据输入以均值为中心且方差不变有助于实现这一点。你还必须对每个测试输入也执行相同的归一化过程,所以请确保你的训练集与真实数据类似。

  以合理地保留动态范围的方式对输入数据进行缩放。这个步骤和归一化有关,但是应该在归一化操作之前进行。例如,在线] 的数据 x 通常可以用「tanh(x)」或「tanh(x/C)」来进行操作,其中 C 是某个常数,它可以对曲线进行拉伸,从而在 tanh 函数的动态倾斜(斜率较大)部分对更大输入范围内的数据进行拟合。尤其是在输入数据在函数的一端或者两端都不受限的时候,神经网络将在数据处于 (0,1) 时学习效果更好。

  一般不要使用学习率衰减。在随机梯度下降(SGD)中,降低学习率是很常见的,但是 ADAM 天然地就考虑到了这个问题。如果你真的希望达到模型性能的极致,请在训练结束前的一小段时间内降低学习率;你可能会看到一个突然出现的很小的误差下降,之后它会再次趋于平缓。

  如果你的卷积层有 64 或 128 个滤波器,这就已经足够了。特别是对于深度网络来说,比如 128 个滤波器就已经很多了。如果你已经拥有了大量的滤波器,那么再添加更多的滤波器可能并不会提升性能。

  池化是为了变换不变性(transform invariance)。池化本质上是让网络学习到图像「某个部分」的「一般概念」。例如,最大池化能够帮助卷积网络对图像中特征的平移、旋转和缩放具备一定的鲁棒性。

  如果网络学习效果很差(指网络在训练中的损失/准确率不收敛,或者你得不到想要的结果),你可以试试下面的这些方法:

  过拟合!如果你的网络学习效果不佳,你首先应该做的就是去过拟合一个训练数据点。准确率基本上应该达到 100% 或 99.99%,或者说误差接近 0。如果你的神经网络不能对一个数据点达到过拟合,那么模型架构就可能存在很严重的问题,但这种问题可能是十分细微的。如果你可以过拟合一个数据点,但是在更大的集合上训练时仍然不能收敛,请尝试下面的几条建议。

  降低学习率。你的网络会学习地更慢,但是它可能会找到一个之前使用较大的步长时没找到的最小值。(直观地说,你可以想象一下你正在走过路边的沟渠,此时你想要走进沟的最深处,在那里模型的误差是最小的。)

  提高学习率。这将加快训练速度,有助于加强反馈回路(feedback loop)。这意味着你很快就能大概知道你的网络是否有效。尽管这样一来网络应该能更快地收敛,但是训练结果可能不会太好,而且这种「收敛」状态可能实际上是反复震荡的。(使用 ADAM 优化器时,我们认为在许多实验场景下,~0.001 是比较好的学习率。)

  减小(小)批量处理的规模。将批处理大小减小到 1 可以向你提供与权重更新相关的更细粒度的反馈,你应该将该过程在 TensorBoard(或者其他的调试/可视化工具)中展示出来。

  删掉批归一化层。在将批处理大小减小为 1 时,这样做会暴露是否有梯度消失和梯度爆炸等问题。我们曾经遇到过一个好几个星期都没有收敛的网络,当我们删除了批归一化层(BN 层)之后,我们才意识到第二次迭代的输出都是 NaN。在这里使用批量归一化层,相当于在需要止血带的伤口上贴上了创可贴。批归一化有它能够发挥效果的地方,但前提是你确定自己的网络没有 bug。

  加大(小)批量处理的规模。使用一个更大的批处理规模——还觉得不够的话,如果可以,你不妨使用整个训练集——能减小梯度更新的方差,使每次迭代变得更加准确。换句话说,权重更新能够朝着正确的方向发展。但是!它的有效性存在上限,而且还有一些物理内存的限制。我们发现,这条建议通常不如前两个建议(将批处理规模减小到 1、删除批归一化层)有用。

  检查你矩阵的重构「reshape」。大幅度的矩阵重构(比如改变图像的 X、Y 维度)会破坏空间局部性,使网络更不容易学习,因为这时网络也必须学习重构。(自然特征变得支离破碎。事实上自然特征呈现出空间局部性也是卷积神经网络能够如此有效的原因!)使用多个图像/通道进行重构时要特别小心;可以使用 numpy.stack() 进行适当的对齐操作。

  仔细检查你的损失函数。如果我们使用的是一个复杂的函数,可以试着把它简化为 L1 或 L2 这样的形式。我们发现 L1 对异常值不那么敏感,当我们遇到带有噪声的批或训练点时,可以进行稍小幅度的调整。

  如果可以,仔细检查你的可视化结果。你的可视化库(matplotlib、OpenCV 等)是否调整数据值的范围或是对它们进行裁剪?你可以考虑使用一种视觉上均匀的配色方案。

  为了使上文描述的过程更有关联性,下面给出了一些用于描述我们构建的卷积神经网络的部分真实回归实验的损失图(通过 TensorBoard 进行可视化)。

  看看这些没有经过平滑的值有多么「疯狂」!学习率太高了吗?我们试着降低学习率,并且在一组输入数据上进行训练:

  你可以看到学习率最初的几个变化发生在哪里(大约训练了 300 步和 3000 步时)。显然,这里我们进行的学习率下降调整太快了。所以如果给它更长的学习率衰减时间,它将表现得更好(损失更低):

  可以看到,学习率在第 2000 步和第 5000 步时下降。这种情况更好,但是仍然不够完美,因为损失并没有降到 0。

  然后我们停止学习率衰减,并且尝试通过 tanh 函数将输入值移动到一个更狭窄的范围内。这很显然将误差值带到了 1 以下,但是我们始终不能过拟合训练集:

  在这里我们发现了,通过删除批归一化层,网络很快地在一两次迭代之后输出 NaN。我们禁用了批归一化,并将初始化方法改为方差缩放法。这让一切都不一样了!我们可以过拟合仅仅包含一两个输入的测试集。然而,下面的图对 Y 轴进行了裁剪。初始误差值远远高于 5,这说明误差减小了近 4 个数量级:

  上方的图是非常平滑的,但是你可以看到,它极其迅速地过拟合了测试输入,并且随着时间推移,整个训练集的损失降到了 0.01 以下。这个过程没有降低学习率。之后,我们在学习率降低了一个数量级之后继续训练,得到了更好的结果:

  这些结果要好得多!但是如果我们以几何级别降低学习率,而不是将训练分成两部分,会如何呢?

  这大概是因为学习率下降地太快了。乘数如果取 0.999995 会更好,但是结果和完全不衰减相差无几。我们从这个特定的实验序列中得出结论:批归一化隐藏了糟糕的初始化导致的梯度爆炸;并且除了在最后故意设计的一个学习率衰减可能有帮助,减小学习率对 ADAM 优化器并没有特别的帮助。与批归一化一样,对值进行裁剪掩盖了真正的问题。当然还可以通过 tanh 函数控制高方差的输入值。

  学的东西有点儿杂,决心把keras好好的过一遍,根据《深度学习:基于Keras的Python实践》,完成小代码,以求更加了解Keras,其实应该先去学Tensorflow,但因为刚好有书,就先看这个吧...博文来自:ChiLi-L的博客

  翻译AI科技大本营参与王赫上个月,我有幸结识了DeepCognition.ai的创始人。DeepCognition(深度认知)建立的深度学习工作室,为很多准备部署深度学习框架和采用人工智能技术的机...博文来自:AI科技大本营

  神经网络有时可以与乐高积木进行比较,在那里你可以构建几乎任何简单到复杂的结构,你的想象力可以帮助你构建。计算机视觉任务类型目标识别:物体识别是得到一个原始的图像,任务是给出目标位置和识别物体属于哪个类...博文来自:杰径通幽

  深度学习基本模型浅析前言台湾李宏毅的深度学习课程说实话讲得还是比较不错的,有需要的话还是比较推荐学习,这篇也是基于它的深度学习基本结构的讲解的总结。 深度学习的三个步骤深度学习首先是我们要构建一个网络...博文来自:jcjx0315的博客

  数据集和代码均已上传到Github中,欢迎大家下载使用。Github地址:如果这个...博文来自:z小白的博客

  1、卷积神经网络CNN\quad从神经学角度来说,卷积神经网络的设计灵感来自人脑视觉皮层对外界事物的感知,人眼以图像的形式把感知到的事物传递给大脑,大脑童工逐层的对该图像进行抽象,抽取出图像的边角等代...博文来自:wyisfish的博客

  九、DeepLearning的常用模型或者方法9.1、AutoEncoder自动编码器       DeepLearning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有...博文来自:qwj的博客

  深度学习模型和评估设计和配置深度学习模型时,面临选择(比如网络的层数、大小和类型,以及损失函数的选择等),必须做出决策来选择合适的设计与配置。最好的选择是设计小型实验,并用实际数据来评估各个选项。深度...博文来自:zhangyuee19501107的专栏

  一个正确的数学模型应当是形式上简单的。 一个正确的模型一开始可能还不如一个精雕细琢过的错误模型来的准确,但是如果我们认定大致方向是对的,就应该坚持下去。 大量准确的数据对研发很重要。 正确的模型也可能...博文来自:纹水清阁的博客

  转载自【量子位】公众号QbitAI原文地址:图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容。量子位今天推荐...博文来自:cdhcs1516的博客

  编者按:本书节选自图书《深度学习轻松学》第十章部分内容,书中以轻松直白的语言,生动详细地介绍了深层模型相关的基础知识,并深入剖析了算法的原理与本质。同时还配有大量案例与源码,帮助读者切实体会深度学习的...博文来自:CSDN 人工智能

  目前在深度学习领域分类两个派别,一派为学院派,研究强大、复杂的模型网络和实验方法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目标。复杂的模型固然具有更...博文来自:XlyPb

  循环神经网络(RecurrentNeuralNetworks)翻译自:UnderstandingLSTMNetworks当你阅读这篇文章时,你会根据已掌握的词汇来理解文中词语的意思,你不会说仍掉所有的...博文来自:wyisfish的博客

  参考下文:基于深度学习的目标检测技术演进:R-CNN、FastR-CNN、FasterR-CNNobjectdetection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。ob...博文来自:游泳的鱼的专栏

  用作记录一些模型的设计构思。多任务学习,该模型底层存在三个任务x1,x2,x3。每个任务意义不同,甚至维度,分布都不同。但顶层输出变量y具有相同意义,上层结构是共享的。由于上层共享参数,最终导致低层结...博文来自:心之所向

  数据不够怎么训练深度学习模型?不妨试试迁移学习本质就是这个图!pretrainedmodel就是你截取的部分神经网络模型(迁移学习),而nanonet就是你自己加入的网络层。随着深度学习技术在机器翻译...博文来自:weixin_34384557的博客

  内容大纲分类和回归之外的机器学习形式评估机器学习模型的规范流程为深度学习准备数据特征工程解决过拟合问题处理机器学习问题的通用流程监督学习的主要种类及其变种主要包括两大类问题:分类回归变种问题主要有:序...博文来自:Bings Blog

  作者:chen_h微信号&微信公众号:coderpai简书地址:是提供一些高可用的Pyth...博文来自:CoderPai的博客

  深度学习-30:基础CNN模型和深度学习模型。神经网络是人工智能启蒙,卷积神经网络是人工智能的里程碑,卷积神经网络最终演化出各种使用的基于卷积神经网络的人工智能算法。目前基于卷积神经网络的人工智能算法...博文来自:智能多媒体

  LeNet5 LeNet5诞生于1994年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从1988年开始,在许多次成功的迭代后,这项由YannLeCun完成的开拓性成果...博文来自:weixin_38907560的博客

  计算深度学习模型的可训练参数的数量被认为太微不足道了,因为您的代码已经...博文来自:喜欢打酱油的老鸟

  一直以来,研究者与开发者都经常在GitHub宝库中搜索比较有意思的项目与实现,但我们可能需要一个确切的主题,并做一些筛选。近日有开发者发布了一个模型聚合平台,我们可以......博文来自:IT派

  前一期介绍了表示学习RepresentationLearning,指出其中比较有趣的一个方向-共享表示学习。今天介绍共享表示学习最相关的机器学习领域-迁移学习(TransferLearning)。文章...博文来自:lqfarmer的博客

  大数据文摘作品编译:姜范波、云舟本文讲的是如何快速而不求完美地部署一个训练好的机器学习模型并应用到实际中。如果你已经成功地使用诸如Tensorflow或Caffe这样的框架训练好了一个机器学习模型,现...博文来自:BigDataDigest的博客

  2006年以来,机器学习领域突破性发展,不仅依赖于云计算、Hadoop框架的大数据的并行处理能力,还依赖于算法,该算法就是深度学习。它抽象模拟了人脑神经元传递信息和链接的方式。1.1、模拟大脑的学习和...博文来自:yingwei13mei的博客

  前言在前两章,我们介绍了一些在已有的深度学习模型的基础上,直接对其进行压缩的方法,包括核的稀疏化,和模型的裁剪两个方面的内容,其中核的稀疏化可能需要一些稀疏计算库的支持,其加速的效果可能受到带宽、稀疏...博文来自:东南风的博客

  目前来看,很多对NN的贡献(特别是核心的贡献),都在于NN的梯度流上,比如-sigmoid会饱和,造成梯度消失。于是有了ReLU。-ReLU负半轴是死区,造成梯度变0。于是有了LeakyReLU,PR...博文来自:whz1861的博客

  KerasTensorFlow教程:如何从零开发一个复杂深度学习模型  Keras是提供一些高可用的PythonAPI,能帮助你快速的构建和训练自己的深度学习模型,它的后端是TensorFlow或者T...博文来自:Linias的博客

  技术是随着问题而产生的,如果不从要解决问题的角度出发应用技术,最终会演化为技术堆砌,并由于每个技术点的副作用进而引起新的问题。以问题驱动的方式总结常用的模型训练方法和这些训练方法要解决的问题。这些训练...博文来自:数据笔记

  在使用深度学习框架进行目标检测与识别时,我们常常不知道如何去提高模型的鲁棒性以及检测的正确率。下面就为大家讲述一下如何对深度学习进行调参。从而对深度学习有更深的了解。  1.DataAugment...博文来自:xiaomifanhxx的博客

  如今深度学习发展火热,但很多优秀的文章都是基于经典文章,经典文章中的一句一词都值得推敲和分析。此外,深度学习虽然一直被人诟病缺乏足够令人信服的理论,但不代表我们不能感性分析理解,下面我们将对2014年...博文来自:CSDN人工智能

  前言在前两章,我们介绍了一些在已有的深度学习模型的基础上,直接对其进行压缩的方法,包括核的稀疏化,和模型的裁剪两个方面的内容,其中核的稀疏化可能需要一些稀疏计算库的支持,其加速的效果可能受到带宽、稀疏...博文来自:shentanyue的博客

  原创 2018年01月11日15:16:28189深度学习模型参数很多(模型很大)是制约深度学习模型部署在移动端一个很大的瓶颈,最近有不少轻量级的深度学习模型提出,以下是对一些经典轻量级深度学习模型的...博文来自:fsFengQingYangheihei的博客

  深度生成模型可以分为有监督与无监督,主要还是在于无监督地应用,用于在没有目标类标签信息的情况下捕捉观测到或可见数据的高阶相关性,可以通过从网络中采样来生成有效样本,譬如受限玻尔兹曼机(Restrict...博文来自:hszzjs的博客

  原文链接:最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复杂度...博文来自:牧野的博客

  LeNet5LeNet5诞生于1994年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从1988年开始,在许多次成功的迭代后,这项由YannLeCun完成的开拓性成果被命名为LeNet5...博文来自:只为成功找方法 不为失败找借口

  深度学习是机器学习大家族的一员,与任务指向性的算法不同,深度学习主要学习数据的表示(分布)。学习方法分为监督式,半监督式或者无监督式三种方式。深度学习思维导图分为三张表,前两张表把深度学习所有的概念、...博文来自:lqfarmer的博客

  圣诞一个暖和的圣诞见到了毕业后就没有见过的minice还有还有传说中的silent88的站长提到88我热血沸腾可是好久没有去88也没有去杭州因此我的密码里有个88同样也有个hz二去stanford还是...博文来自:luco的专栏

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。最近在折腾那个安卓扫码登录的功能,然后网页端是用php的做了,...博文来自:朱培(知浅_ZLH)

  今天把本人花费一个月左右整理的600多款小程序源码发布出来,以后每个月还会持续更新,很大一部分都带有后台源码并包含有小程序上线教程,帮你分分钟上线自己的小程序,下面我们来看看目录截图,最后面会把源码目...博文来自:明礼馨德的博客

  前言本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部分做的一个修改和补充, 其中最大的变化就是后台框架变成了Spring Boot。本工程所用到的技术或工...博文来自:天降风云的博客

  yingwei13mei:其实一般的lnk错可以从两方面着实,一: lnk后面的信息可以看出是哪个函数的问题;二,从依赖的库去着手,看是否有动态库或静态库没放到依赖路径下,再一个就是依赖库的版本兼容性问题了

http://sec-ir.com/diaoshimoxing/608.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有