构建深度学习网络的实用技巧

《深度学习100例》目录 大家好,我是 K同学啊! 《深度学习100例》系列在昨天已经完成了第20博客! 这是一个漫长的过程,中途遇见也结识了不少优秀的伙伴,这里简单介绍一下这90天做的事情 1. 深度学习100例-卷积神经网络(CNN)实现MNIST手写数字识别 | 第1天 这篇文章作为《深度学习100例》的首篇文章,我使用了最简单也最经典的案例 – MNIST手写数字识别。极简化了神经网络程序,当然,如何你是一个从来没了接触过深度学习的小白,那我建议你可以先看这个专栏:《小白入门深度学习》 使用的是MNIST数据集,MNIST 阅读详情

转载自:https://www.cnblogs.com/DicksonJYL/p/9660811.html

作者| Matt H/Daniel R

译者| 婉清

编辑| Jane

出品| AI 科技大本营

 

【导读】在经历成千上万个小时机器学习训练时间后,计算机并不是唯一学到很多东西的角色,作为开发者和训练者的我们也犯了很多错误,修复了许多错误,从而积累了很多经验。在本文中,作者基于自己的经验(主要基于 TensorFlow)提出了一些训练神经网络的建议,还结合了案例,可以说是过来人的实践技巧了。

 

 

通用技巧

 

 

有些技巧对你来说可能就是明摆着的事,但在某些时候可能却并非如此,也可能存在不适用的情况,甚至对你的特定任务来说,可能不是一个好的技巧,所以使用时需要务必要谨慎!

 

▌使用 ADAM 优化器

 

确实很有效。与更传统的优化器相比,如 Vanilla 梯度下降法,我们更喜欢用ADAM优化器。用 TensorFlow 时要注意:如果保存和恢复模型权重,请记住在设置完AdamOptimizer 后设置 Saver,因为 ADAM 也有需要恢复的状态(即每个权重的学习率)。

 

▌ReLU 是最好的非线性(激活函数)

 

就好比 Sublime 是最好的文本编辑器一样。ReLU 快速、简单,而且,令人惊讶的是,它们工作时,不会发生梯度递减的情况。虽然 sigmoid 是常见的激活函数之一,但它并不能很好地在 DNN 进行传播梯度。

 

▌不要在输出层使用激活函数

 

这应该是显而易见的道理,但如果使用共享函数构建每个层,那就很容易犯这样的错误:所以请确保在输出层不要使用激活函数。

 

▌请在每一个层添加一个偏差

 

这是 ML 的入门知识了:偏差本质上就是将平面转换到最佳拟合位置。在 y=mx+b 中,b 是偏差,允许曲线上下移动到“最佳拟合”位置。

 

▌使用方差缩放(variance-scaled)初始化

 

在 Tensorflow 中,这看起来像tf.reemaner.variance_scaling_initializer()。根据我们的经验,这比常规的高斯函数、截尾正态分布(truncated normal)和 Xavier 能更好地泛化/缩放。

 

粗略地说,方差缩放初始化器根据每层的输入或输出数量(TensorFlow中的默认值是输入数量)调整初始随机权重的方差,从而有助于信号更深入地传播到网络中,而无须额外的裁剪或批量归一化(batch normalization)。Xavier 与此相似,只是各层的方差几乎相同;但是不同层形状变化很大的网络(在卷积网络中很常见)可能不能很好地处理每层中的相同方差。

 

▌归一化输入数据

 

对于训练,减去数据集的均值,然后除以它的标准差。在每个方向的权重越少,你的网络就越容易学习。保持输入数据以均值为中心且方差恒定有助于实现这一点。你还必须对每个测试输入执行相同的规范化,因此请确保你的训练集与真实数据相似。

 

以合理保留其动态范围的方式缩放输入数据。这与归一化有关,但应该在归一化之前就进行。例如,真实世界范围为 [0,140000000] 的数据 x 通常可以用 tanh(x) 或 tanh(x/C) 来控制,其中 C 是一些常数,它可以拉伸曲线,以适应 tanh 函数缓坡部分的动态范围内的更多输入范围。特别是在输入数据在一端或两端可能不受限制的情况下,神经网络将在(0,1)之间学习得更好。

 

▌一般不用学习率衰减

 

学习率衰减在 SGD 中更为常见,但 ADAM 很自然地处理了这个问题。如果你真的想把每一分表现都挤出去:在训练结束时短时间内降低学习率;你可能会看到突然的、非常小的误差下降,然后它会再次变平。

 

如果你的卷积层有 64 或 128 个过滤器,那就足够了。特别是一个对于深度网络而言。比如,128 个真的就已经很多了。如果你已经有了大量的过滤器,那么再添加更多的过滤器未必会进一步提高性能。

 

▌池化用于平移不变性

 

池化本质上就是让网络学习图像“那部分”的“总体思路”。例如,最大池化可以帮助卷积网络对图像中的特征的平移、旋转和缩放变得更加健壮。

 

 

调试神经网络

 

 

如果你的网络没能很好地进行学习(指在训练过程中损失/准确率没有收敛,或者没有得到预期的结果),那么可以试试以下的技巧:

 

▌过拟合

 

如果你的网络没有学习,那么首先要做的第一件事就是对训练点进行过拟合。准确率基本上应为 100% 或 99.99%,或误差接近 0。如果你的神经网络不能对单个数据点进行过拟合,那么体系架构就可能有严重的问题,但这可能是微妙的。如果你可以对一个数据点进行过拟合,但是对较大的集合进行训练仍然无法收敛,请尝试以下建议:

 

▌降低学习率

 

你的网络学习就会变得更慢一些,但是它可能会找到以前无法进入的最小化的方式,因为它的步长太大了。

 

▌提高学习率

 

这样做将会加快训练,有助于收紧反馈,这意味着无论你的网络是否正常工作,你都会很快地知道你的网络是否有效。虽然网络应该更快地收敛,但其结果可能不会很好,而且“收敛”实际上可能会跳来跳去。(对于 ADAM 优化器,我们发现在很多经历中,学习率大约为 0.001 时,表现很不错。)

 

▌减少批量处理规模

 

将批处理大小减小到 1,可以为你提供与权重更新相关的更细粒度的反馈,你应该使用TensorBoard(或其他一些调试/可视化工具)展示出来。

 

▌删除批归一化层

 

随着批处理大小减少到 1,这样做会暴露出梯度消失或梯度爆炸的问题。我们曾有过一个网络,在好几周都没有收敛,当我们删除了批归一化层之后,我们才意识到第二次迭代时输出都是 NaN。就像是创可贴上的吸水垫,它也有它可以发挥效果的地方,但前提是你知道网络没有 Bug。

 

▌增加批量处理的规模

 

一个更大的批处理规模,如果可以的话,整个训练集减少梯度更新中的方差,使每个迭代更准确。换句话说,权重更新将朝着正确的方向发展。但是!它的可用性和物理内存限制都有一个有效的上限。通常,我们发现这个建议不如上述两个建议有用,可以将批处理规模减少到1并删除批归一化层。

 

▌检查你的重构

 

大幅度的矩阵重构(如改变图像的X、Y 维度)会破坏空间局部性,使网络更难学习,因为它也必须学会重塑。(自然特征变得支离破碎。事实上,自然特征在空间上呈局部性,也是为什么卷积神经网络能如此有效的原因!)如果使用多个图像/通道进行重塑,请特别小心;使用 numpi.stack()进行适当的对齐操作。

 

▌仔细检查你的损失函数

 

如果使用一个复杂的函数,请尝试将其简化为 L1 或 L2。我们发现L1对异常值不那么敏感,在发出噪声的批或训练点时,不会做出太大的调整。

 

如果可以的话,仔细检查你的可视化。你的可视化库(matplotlib、OpenCV等)是调整值的比例呢,还是它们进行裁剪?可考虑使用一种视觉上均匀的配色方案。

 

 

实战分析

 

 

为了使上面所描述的过程更容易让读者理解,我们这儿有一些用于描述我们构建的卷积神经网络的真实回归实验的损失图(通过TesnorBoard)。

 

起初,这个网络根本没有学习:

                                       

我们试图裁剪这些值,以防止它们超出界限:

               

嗯。看看不平滑的值有多疯狂啊!学习率是不是太高了?我们试着在一个输入数据上降低学习率并进行训练:

               

你可以看到学习率的前几个变化发生的位置(大约在 300 步和 3000 步)。显然,我们衰减得太快了。所以,给它更多的衰减时间,它表现得会更好:

               

你可以看到我们在 2000 步和 5000 步的时候衰减了。这样更好一些了,但还不够好,因为它没有趋于 0。

 

然后我们禁用了 LR 衰减,并尝试将值移动到更窄的范围内,而不是通过 tanh 输入。虽然这显然使误差值小于 1,但我们仍然不能对训练集进行过拟合:

       

 

这里我们发现,通过删除批归一化层,网络在一到两次迭代之后迅速输出 NaN。我们禁用了批归一化,并将初始化更改为方差缩放。这些改变了一切!我们能够对只有一两个输入的测试集进行过拟合了。当底部的图标裁剪Y轴时,初始误差值远高于 5,表明误差减少了近 4 个数量级:

       

 

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

               

这些结果好得多了!但是,如果我们以几何方式降低学习率,而不是将训练分成两部分,会发生什么样的结果呢?

 

通过在每一步将学习率乘以 0.9995,结果就不那么好了:

               

大概是因为学习率衰减太快了吧。乘数为 0.999995 会表现的更好,但结果几乎相当于完全没有衰减。我们从这个特定的实验序列中得出结论,批归一化隐藏了由槽糕的初始化引起的爆炸梯度,并且 ADAM 优化器对学习率的衰减并没有什么特别的帮助,与批归一化一样,裁剪值只是掩盖了真正的问题。我们还通过 tanh 来控制高方差输入值。

【深度学习】Java DL4J基于多层感知机(MLP)构建公共交通优化模型 而通过深度学习技术,我们能够深入挖掘乘客出行数据和公交车辆运行数据中隐藏的规律与模式。例如,从乘客出行数据中可以分析出不同时间段、不同区域的出行需求特点,包括出发地、目的地、出行高峰低谷时段等信息;从公交车辆运行数据里能获取车辆的行驶速度、站点停留时间、满载率等情况。利用这些丰富的信息,我们可以构建智能化的公共交通优化模型,对公交线路进行动态调整,如开辟新线路、优化现有线路站点设置,同时合理安排公交车辆的调度,实现精准投放运力,提高公交车辆的利用率,减少空驶里程,最终显著提升公共交通的效率和服务质量,缓解城 阅读详情

相关推荐

AIGC实战——深度学习 (Deep Learning, DL)

深度学习 (Deep Learning, DL) 是贯穿所有生成模型 (Generative Model) 的共同特征,几乎所有复杂的生成模型都以深度神经网络为核心,深度神经网络能够学习数据结构中的复杂关系,而不需要预先提取数据特征。在本节中,我们将介绍深度学习基本概念,并利用 Keras 构建深度神经网络。

盼小辉丶的博客 7万+

一位ML工程师构建深度神经网络的实用技巧

作者| Matt H/Daniel R译者| 婉清编辑| Jane出品| AI 科技大本营【导读】在经历成千上万个小时机器学习训练时间后,计算机并不是唯一学到很多东西的角...

AI科技大本营 698

【深度学习】Java DL4J基于 CNN 构建车辆识别与跟踪模型

DL4J是一个开源的深度学习库,用于在Java和Scala中进行深度学习。它提供了丰富的神经网络架构,如多层感知机MLP)、卷积神经网络CNN)、循环神经网络RNN)及其变体长短期记忆网络LSTM)等。在本案例中,我们选择卷积神经网络(CNN)来实现车辆识别与跟踪模型。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 5681

机器学习原理及训练过程

在机器学习的训练过程中,通常是使用一个数据集来训练模型。训练模型的目标是通过学习数据集中的模式和规律,来建立一个能够对一个新的数据集进行准确预测。③计算损失函数:将模型的预测输出与真实的输出标签进行比较,得到一个损失函数(代价函数)的值,用来衡量模型的预测值与真实值之间的差异。②前向传播:对于每条训练数据,将输入数据通过模型进行前向传播(即从输入到输出计算过程),得到模型对输入的预测输出。④反向传播:根据损失函数,使用反向传播算法计算损失函数对模型参数的梯度。训练模型的过程可以看作实在寻找最优参数的过程。

m0_54470017的博客 1165

【深度学习】Java DL4J基于 RNN 构建智能停车管理模型

Java DL4J是一个开源的、分布式的深度学习库,用于在Java和Scala中进行深度学习。易于使用:提供了简单的API,方便开发者快速搭建和训练深度学习模型。高性能:支持多线程和分布式计算,能够充分利用计算资源,提高模型训练速度。丰富的模型支持:支持多种深度学习模型,如多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)等。在本案例中,我们使用RNN构建智能停车管理模型。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 6040

Java 人工智能应用:使用 DL4J 实现深度学习算法

本文介绍了如何使用Java深度学习库DL4J实现深度学习算法。DL4J是为Java开发者设计的开源分布式深度学习库,可与Hadoop和Spark集成处理大规模数据。文章详细讲解了DL4J开发环境的搭建步骤,包括Maven依赖配置和Java环境准备。重点演示了如何使用DL4J构建多层感知机(MLP)模型,涵盖数据准备、模型构建、训练和评估的完整流程。通过示例代码展示了如何实现数据预处理、神经网络配置、模型训练和性能评估,为Java开发者提供了深度学习应用的实践指南。文中采用的MLP模型适用于二分类问题,可作为

shrgegrb的博客 2434

最全的机器学习模型训练全流程

简言 发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰、生动形象。想给大家分享一下。 项目地址:https://github.com/dataprofessor/infographic 全文如下: 感觉学习数据科学枯燥无味,那如何能让学习数据科学变得有趣而简单呢?带着这个目标,我开始在iPad上涂鸦建立机器学习模型所需的流程。 1. 数据集 数据集是你构建机器学习模型历程中的起点。简单来说,数据集本质上是一个M×N矩阵,其中M代表列(特征),N代表行(样本)。 列可以

kuokay的博客 2万+

mnist数据集下载及如何使用生成训练集文件.7z

我在里面加了下载之后如何通过代码解压使用数据集,请各位下载之后记得根据自己的学习文件夹地址微调代码。 祝各位学习顺利

机器学习如何对模型进行训练?机器学习模型训练流程及注意事项

机器学习中,模型的训练是非常重要的一个过程,通过训练可以使模型更加准确地预测未知数据,进而提高模型的泛化能力。训练模型的过程可以分为以下几个步骤:

gp16674213804的博客 1万+

已解决-Parallels Desktop 16 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络

我是月球挖掘机,相信不少打工人为了尝鲜已经更新了MacOS 11 Big Sur,当然,苹果每次的系统大更新,都会给我们软件的功能无法使用惊喜,这次的也不例外。 这个问题是我在更新macOS Big Sur之后,Parallels Desktop打开虚拟机后,提示: 报错信息 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络 这是我的软件版本: 起初我以为是我的虚拟机坏了,结果重装了一遍虚拟机,没有任何用处。我开始在网上找方法,只能找到那个使用命令行打开软件的命令,除此之外没有了

月球挖掘机 5万+

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4200

深度学习算法/模型——总章

深度学习算法/模型-总章0. 承上启下:深度学习的目的/任务/优势机器学习的目的深度学习的任务/优势深度学习的改进/方向1. 深度学习介绍1.1 概论:[整体概述](https://blog.youkuaiyun.com/Robin_Pi/article/details/104657408)1.2 补充:[深度学习基础](https://blog.youkuaiyun.com/Robin_Pi/article/detai...

Robin_Pi的博客 950

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(一)

上面3章图是完成后的效果图 游戏已完成,除了英雄外,基本还原了90%的游戏内容,一共13关,20种防御塔,30+种敌人,如上图,以假乱真吧 下面从地图模块起介绍我的方法,如有更好的方法,请留言一起讨论,游戏资源下载原版游戏数据包,解压即可 推荐一款软件,TextureUnpackerRelease1.04可以分割plist形式的图片,提高效率 经过一个月学习也发现之前有很多化简为繁的错误

7172

神经网络有趣案例_深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究...

本文是吴恩达老师的深度学习课程[1]笔记部分。作者:黄海广[2]主要编写人员:黄海广、林兴木(第四所有底稿,第五课第一二周,第三周前三节)、祝彦森:(第三课所有底稿)、贺志尧(第五课第三周底稿)、王翔、胡瀚文、 余笑、 郑浩、李怀松、 朱越鹏、陈伟贺、 曹越、 路皓翔、邱牧宸、 唐天泽、 张浩、 陈志豪、 游忍、 泽霖、沈伟臣、 贾红顺、 时超、 陈哲、赵一帆、 胡潇杨、段希、于冲、张鑫...

weixin_39895881的博客 300

某程token参数逆向分析

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

weixin_73499887的博客 2882

快速理解OSI七层模型(举例理解,数据传输过程,深入理解OSI七层模型)

我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。 需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。 那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。

CN_TangZheng的博客 3万+

深度学习入门 基于Python的理论与实现

内容简介 本书是深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术。书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。书中不仅介绍了深度学习和神经网络的概念、特征等基础知识,对误差反向传播法、卷积神经网络等也有深入讲解,此外还介绍了深度学习相关的实用技巧,自动驾驶、图像生成、强化学习等...

u014723113的专栏 526

Type-C转DP1.4转C双向互传转接线方案

Type-C转DP双向互转方案的核心在于利用Type-C接口中的Alt Mode(交替模式)功能。通过利用Type-C接口的Alt Mode功能,该方案实现了Type-C接口与DP接口之间的双向互传,极大地丰富了用户的视觉体验。在选择Type-C转DP双向互转方案时,用户需要关注兼容性、性能需求、线缆长度和品牌等因素,以确保获得最佳的传输质量和使用体验。因此,Type-C转DP双向互转方案应运而生,旨在实现Type-C接口与DP接口之间的无缝连接,满足用户对高效能和高清晰度视频传输的需求。

m0_70875024的博客 4976

Python入门深度学习:环境搭建与第一个神经网络

本文介绍了如何在星图GPU平台自动化部署深度学习项目训练环境镜像,快速搭建AI开发环境。通过该平台,用户可轻松配置PyTorch等框架,实现手写数字识别等入门级神经网络应用,为初学者提供便捷的深度学习实践体验。

weixin_30661119的博客 362

精通 Android NDK/JNI:从入门到精通实战与面试精粹

在Android开发中,

郑伟强dev的专栏 144

YOLO环境配置+项目启动全流程(Conda+PyCharm超详解)

YOLO(You Only Look Once)是一个基于深度学习的目标检测算法,广泛应用于智能识别领域。本篇保姆级教学将手把手教你如何从零开始运行一个YOLO项目,适合完全没有基础的新手。

一键难忘的博客 1541

Lasagne深度学习框架完全指南:从安装到构建神经网络的终极教程

Lasagne是一个轻量级深度学习框架,专门用于在Theano中构建和训练神经网络。本教程将带你从零基础开始,掌握Lasagne的安装方法、核心功能及神经网络构建流程,让你快速上手这个强大的深度学习工具。 ## 🚀 为什么选择Lasagne? Lasagne作为一款轻量级深度学习框架,具有以下核心优势: - **简洁灵活**:专注于提供神经网络构建的核心组件,不引入过多复杂抽象 - **Th

gitblog_01018的博客 479

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【深度学习】Java DL4J 2024年度技术总结

在当今数字化浪潮中,深度学习作为人工智能领域的核心驱动力,正以前所未有的速度改变着我们的生活和工作方式。从图像识别到自然语言处理,从医疗诊断到金融预测,深度学习的应用场景无处不在,展现出巨大的潜力和价值。Java作为一门广泛应用于企业级开发的编程语言,以其稳定性、可移植性和丰富的类库资源,在软件开发领域占据着重要地位。然而,传统的Java开发在面对深度学习复杂的模型构建和大规模数据处理时,往往显得力不从心。的出现,为Java开发者打开了一扇通往深度学习世界的大门。DL4J是一个专为Java和Scala。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【DL】2023年你应该知道的 10 大深度学习算法

它们是训练有素的神经网络,可将数据从输入层复制到输出层。它们具有相同数量的输入和输出层,但可能有多个隐藏层,可用于构建语音识别、图像识别和机器翻译软件。无论您是初学者还是专业人士,这三大深度学习算法都将帮助您解决与深度学习相关的复杂问题:CNN 或卷积神经网络、LSTM 或长短期记忆网络和 RNN 或递归神经网络 (RNN)。是的,CNN 是一种深度学习算法,负责以网格模式的形式处理受动物视觉皮层启发的图像。深度学习算法几乎可以处理任何类型的数据,并且需要大量的计算能力和信息来解决复杂的问题。

sikh_0529的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 标准C++中的string类的用法总结
下一篇: 常见特征选择方法简要笔记
Class_guy
博客等级 码龄9年 43粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值