点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

深度学习已经成为解决许多具有挑战性的现实世界问题的方法。对目标检测,语音识别和语言翻译来说,这是迄今为止表现最好的方法。许多人将深度神经网络(DNNs)视为神奇的黑盒子,我们放进去一堆数据,出来的就是我们的解决方案!事实上,事情没那么简单。

在设计和应用DNN到一个特定的问题上可能会遇到很多挑战。为了达到现实世界应用所需的性能标准,对数据准备,网络设计,训练和推断等各个阶段的正确设计和执行至关重要。在这里,我将与大家分享7个实用技巧,让您的深度神经网络发挥最大作用。

1 - 数据,数据,数据

这不是一个大秘密。一直工作得很好的深度学习机器需要燃料 - 大量的燃料; 燃料是数据。我们拥有的标记数据越多,模型的表现就越好。更多的数据导致更好的性能,已经由谷歌大规模的探索3亿图像的数据集印证!

在实际应用中部署Deep Learning模型时,您应该不断地为其提供更多的数据和微调以继续提高其性能。喂饱怪兽:如果你想提高你的模型的性能,那就获得更多的数据!

不断增加的数据产生更好的性能

2 - 你应该使用哪个优化器?

多年来,已经开发了许多梯度下降优化算法,各有其优缺点。一些最流行的包括:

· 随机梯度下降(SGD)+动量方法

· Adam

· RMSprop

· Adadelta

RMSprop,Adadelta和Adam被认为是自适应优化算法,因为它们会自动更新学习速率。使用SGD时,您必须手动选择学习率和动量参数,通常会随着时间的推移而降低学习率。

在实践中,自适应优化器倾向于比SGD更快地收敛,然而,他们的最终表现通常稍差。SGD通常会达到更好的最小值,从而获得更好的最终准确性,但这可能需要比某些优化程序长得多的时间。它也更依赖于强大的初始化和学习速率衰减时间表,这在实践中可能非常困难。

因此,如果你需要一些快速的结果,或者只是想测试一个新的技术,选择自适应优化器。我发现Adam很容易使用,因为它对你选择完美的学习率并不是很敏感。如果您想获得绝对最佳的最终表现,请使用SGD + Momentum,并使用学习率,衰减和动量值来最大化表现。

两全其美的方法有木有!

它最近的研究显示,你可以做到两全其美:高速训练顶尖的性能通过切换从Adam到SGD!这个想法是,训练的早期阶段实际上是SGD对参数调整和初始化非常敏感的时候。因此,我们可以通过使用Adam来启动我们的训练,这将使您节省相当长的时间,而不必担心初始化和参数调整。那么,一旦Adam运转起来,我们可以切换到SGD +动量优化,以达到最佳性能!

Adam vs SGD表现。由于鲁棒性和自适应学习速度,Adam在一开始表现更好,而SGD最终达到更好的全局最小值。

3 - 如何处理不平衡的数据

在很多情况下,您将处理不平衡的 数据,特别是在现实世界的应用程序中。举一个简单而实际的例子:为了安全起见,您正在训练您的深度网络以预测视频流中是否有人持有致命武器。但是在你的训练数据中,你只有50个拿着武器的人的视频和1000个没有武器的人的视频!如果你只是用这些数据来训练你的网络,那么你的模型肯定会非常偏向于预测没有人有武器!

有几件事你可以做到这一点:

· 在损失函数中使用类权重:本质上,代表性不足的类在损失函数中获得更高的权重,因此对该特定类的任何错误分类将导致损失函数中的非常高的误差。

· 过度抽样:重复一些包含代表性不足的训练样例,有助于平衡分配。如果可用的数据很小,这最好。

· 欠采样:您可以简单地跳过一些包含过度表示类的训练示例。如果可用数据非常大,这最好。

· 数据增加为少数类:您可以综合创建更多的代表性不足的训练示例!例如,在前面检测致命武器的例子中,你可以改变属于具有致命武器的类别的视频的一些颜色和光照。

4 - 迁移学习

正如我们在第一个提示中所看到的,深层网络需要大量的数据。不幸的是,对于许多新的应用程序来说,这些数据可能很难并且花费很高。如果我们希望我们的模型表现良好,我们可能需要数十或数十万个新的训练样例进行训练。如果数据集不易获取,则必须全部收集并手动标记。

这就是迁移学习的起点。通过迁移学习,我们不需要太多的数据!这个想法是从一个以前在数百万图像上训练过的网络开始的,比如在ImageNet上预训练的ResNet。然后,我们将通过仅重新训练最后几个层并使其他层独立来微调ResNet模型。那样的话,我们正在将ResNet从数百万图像中学到的信息(图像特征)进行微调,以便我们可以将它应用于不同的任务。这是可能的,因为跨域的图像的特征信息通常非常相似,但是这些特征的分析可以根据应用而不同。

一个基本的迁移学习通道

5 - 快速简单的数据增强,以提高性能

我们现在说过几次:更多的数据=更好的表现。除了迁移学习之外,另一种快速而简单的方法来提高模型的性能,即数据增强。数据增强涉及通过在使用原始类别标签的同时通过改变数据集中的一些原始图像来生成合成训练示例。例如,图像数据增强的常见方式包括:

· 水平和垂直旋转或翻转图像

· 改变图像的亮度和颜色

· 随机模糊图像

· 随机从图像裁剪补丁

基本上,你可以进行任何改变,改变图像的外观,但不是整体的内容,即你可以制作一个蓝色的狗的照片,但你仍然应该能够清楚地看到,照片上是一个狗。

数据裂变!

6 - 训练模型的合奏!

在机器学习中,集合训练多个模型,然后将它们组合在一起以获得更高的性能。因此,这个想法是在相同的数据集上训练同一个任务上的多个深度网络模型。模型的结果然后可以通过投票方案来进行组合,即具有最高票数的胜出。

为了确保所有模型不同,可以使用随机权重初始化和随机数据增强。众所周知,由于使用了多个模型,因此集合通常比单个模型精确得多,因此从不同角度接近任务。在现实世界的应用中,尤其是挑战或竞争中,几乎所有顶级模型都使用合奏。

合奏模型

7 - 加快修剪

我们知道模型精度随深度而增加,但速度又如何呢?更多的图层意味着更多的参数,更多的参数意味着更多的计算,更多的内存消耗和更慢的速度。理想情况下,我们希望在提高速度的同时保持高精度。我们可以通过修剪来做到这一点。

深度神经网络修剪的步骤

这个想法是,在网络中的许多参数中,有些是多余的,对输出没有太大贡献。如果您可以根据对网络的贡献排列网络中的神经元,则可以从网络中移除低排名的神经元,从而形成更小,更快的网络。可以根据神经元权重的L1 / L2均值,平均激活,一些验证集上神经元不为零的次数以及其他创造性方法来进行排序。获得更快/更小的网络对于在移动设备上运行深度学习网络非常重要。

修剪网络的最基本的方法是简单地放弃某些卷积滤波器。在近期的一篇文章中,这样做是相当成功的。这项工作中的神经元排名相当简单:它是每个滤波器权重的L1范数。在每个修剪迭代中,他们对所有的过滤器进行排序,在全部层中修剪m个排名最低的过滤器,重新训练和重复!

在近期的另一篇分析剩余网络结构的文章中提出了修剪过滤器的一个关键洞察。作者指出,在删除层的时候,具有剩余快捷连接的网络(例如ResNets)与没有使用任何快捷连接的网络(如VGG或AlexNet)相比,保留更加良好的精度并且稳健得多。这个有趣的发现具有重要的实际意义,因为它告诉我们在修剪网络进行部署和应用时,网络设计是至关重要的(使用ResNets!)。所以使用最新最好的方法总是很好的!

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

深度学习七个实用技巧相关推荐

  1. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  2. 深度学习训练的小技巧,调参经验。总结与记录。

    深度学习训练的小技巧,调参经验.总结与记录. 2016-10-23 23:07 390人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 经常会被问到你用深度学习训练 ...

  3. 深度学习网络调参技巧

    深度学习网络调参技巧 本文转载自[炼丹实验室],讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得.不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重 ...

  4. 前方高能!AI 大牛 LeCun 设想下一个新前沿:摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值...

    来源:云头条 据深度学习界的领军人物Yann LeCun声称,AI的下一个发展阶段可能是摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值. 据说工程师(以及一些科学家,但以工程师为主)早在坐到板凳 ...

  5. 4个提高深度学习模型性能的技巧

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 深度学习是一个广阔的领域,但我们大多数人在构建模型时都面临一些共同的难题 在这里,我们 ...

  6. 深度学习这么调参训练_深度学习训练的小技巧,调参经验(转)

    经常会被问到你用深度学习训练模型时怎么样改善你的结果呢?然后每次都懵逼了,一是自己懂的不多,二是实验的不多,三是记性不行忘记了.所以写这篇博客,记录下别人以及自己的一些经验. Ilya Sutskev ...

  7. 笔记本深度学习训练散热实用指南

    笔记本的散热能力远不如台式机,跑深度学习训练的时候如果不注意散热有可能会导致温度过高,可能会烧显卡烧主版等等,本文就讨论一下如何用一种简单的办法提升笔记本的散热能力. 注意,事先声明: (1)本贴仅供 ...

  8. 深度学习有哪些实用又好玩的应用?

    2016 年,一场 AlphaGo 与顶级围棋棋手李世石的世纪对决,引发了全球性的人工智能潮流,这一年被称为"人工智能元年". 2019 年,谷歌 DeepMind 开发的全新 A ...

  9. 深度学习提高trick小技巧

    在深度学习中,同一个模型使用不同方式的初始化,比如:数据预处理,batch_size, 学习率, 不同的优化器都能得到不同性能的参数. 学习率 学习率的设置应该随着迭代次数的增加而减小,每迭代完指定次 ...

最新文章

  1. 2022-2028年中国三轴陀螺仪行业市场深度分析及投资前景分析报告
  2. Android 抓取app进程 hprof 文件
  3. MySQL获取数据库每个表的行数
  4. Elasticsearch-5.1.2分词器IK+pinyin简单测试
  5. 2015大学计算机基础,2015新生入学大学计算机基础复习资料
  6. leetcode-6-Z 字形变换
  7. iOS开发-开发总结(七)
  8. 【高速接口-RapidIO】Xilinx SRIO IP 核详解
  9. 201671010119 2016-2017-2《Java程序设计》第十四周学习心得
  10. 许家印大笔押注新能源:恒大集团1200亿沈阳投资建厂造车
  11. 家用工具套装_居家生活必不可少的8款五金工具,便宜又实用
  12. anaconda显示ImportError: cannot import name ‘secure_write‘
  13. plt.Circle()
  14. html登录注册页面验证代码,登录注册页面验证码问题
  15. CIC滤波器的设计与仿真
  16. Docker容器之网络模式
  17. 基于SSM的概念可视化程序设计学习系统 毕业设计-附源码021009
  18. KDEConnect非常便利,kde plasma+android绝配
  19. Java语言每日一练—第14天:银行收入计算
  20. VIP邮箱和免费邮箱哪个好?个人电子邮箱哪家好

热门文章

  1. AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?
  2. IJCAI 2019:中国团队录取论文超三成,北大、南大榜上有名
  3. NLP为RPA带来了什么价值?
  4. 人工智障?243个机器人被裁
  5. 资源 | 2018年14个顶级AI和机器学习会议名录
  6. 开源成就你我,感恩共享礼包
  7. Oracle慌了!华为终于对JDK下手了!
  8. “���”引发的线上事故
  9. Java编程中,有哪些好的习惯从一开始就值得坚持?
  10. 一天1300 Star量,GitHub上新官方命令行工具