刚接触深度学习的小伙伴们应该有这样的疑惑:如何从零起步,从一个简单的idea开始,一步一步推进一个深度学习的学术项目,完成从idea到paper的成功转化?下面我们一起来看看慕尼黑工业大学的Matthias Niessner教授给大家的建议。

1.

怎么从零开始一个深度学习的项目?

很多业内的研究人员都习惯性用流水线似的思路完成项目的起步,一步一步一个脚印,稳扎稳打地向前推进项目。然而,很多刚起步的新人研究者却经常在一些常见且但可规避的问题上踩坑。

下面,我们一起来看看该如何合理地上手第一个深度学习项目吧!

2.

一般的建议:从最简单的模型入手,比如将一个少于一百万参数的模型用于起步实验。对于视觉领域而言,ENet或者ResNet家族中仅包含前几个残差单元的ResNet-18就是个不错的选择。

而与之相对的常见错误,则是直接选用参数量超过一亿大模型,在GPU上训练了超过三周之后,才发现模型的数据读取出现了问题。

3.

去除复杂的模型设计:比如去掉dropout,batch norm,learning rate decay等等。这些trick可能会在最后阶段带来几个百分点的提升,但是在一开始使用这些trick的话,可能会使项目变得过于复杂。

比如,learning rate decay经常会给人training curve已经收敛的错觉,而实际上training loss只是因为learning rate太小而无法继续下降。

4.

一定要设置好模型的train和val,因为你需要loss curve来调试你的模型,TensorBoard就是个很顺手的工具(马老师都说好,你还不用?)。

一定要确保每一个batch的loss都被记录下来,而不是只记录一个batch的loss。val loss也要用和train同样的方式记录,也即是在每一个循环之后,在val集里一个随机batch上跑一跑你的模型。

5.

在所有数据上训练之前,先尝试在train集上的一个样本上overfit,这样可以确保你的输出是正确的,因为你的模型理应可以完完全全记住这个样本。如果所有的正则化都被去掉了,这里的train loss就应该可以无限逼近直至等于零。

需要注意的是,在这个实验里的输入数据实际上是可忽略的。

6.

下一步,你可以试着在5到10个训练样本上overfit。在成功进行上一步实验之后,现在你的模型应该根据不同的输入预测出不同的结果。

对于简单的分类任务,train loss应该也能在最多几分钟之后归零。你的val loss肯定会上升,因为到现在为止,你的模型还没有学到任何东西。

7.

在前几步中,你已经验证了你的数据读取和最基本的模型优化功能,现在应该试着把更多和任务相关的数据放进模型训练了。

这一步的目标是尝试泛化,如果你的val loss下降了,就算只有一点点,那恭喜你,你的模型已经学到一点东西了!

8.

关于训练速度:深度学习非常依赖经验,因此,你必须保证你的实验设置能保证足够快的迭代速度用于模型调试。

一定要清楚你的模型的瓶颈在哪,比如数据读取或反向传播。一个batch的处理速度应该能在一秒以内(当然,处理速度和任务本身也有关系)。

9.

在你的基本设置能顺利工作之后,终于到提升整体性能的时候了。在完整记录train/val loss的基础上,你也需要记录在val集上的各类metric,比如mIoU,准确率,F1-score等等,并在训练的同时显示出来。

10.

同时多跑几个消融实验:在几个循环或者训练几分钟之后,你的loss curve还有各类metric应该能告诉你,你的实验能否有希望成功。

你应该尽早停止那些不太有希望的实验,并开始做新实验。

11.

很多时候,模型的性能都受限于你的数据,比如数据量太小导致的overfitting。这时,不同类别之间的权重平衡和适当的数据增强就开始变得重要了起来。

千万不要在val集上做数据增强,否则你的实验将无法进行横向比较,谨记!

12.

对于GAN一类的生成模型而言,你应该从不包含discriminator loss的模型入手,先试着做最简单的L1回归。在这个实验成功之后,再加上discriminator loss,比如wasserstein就是个很好的选择。

GAN的训练经常失败,大多是因为数据本身的问题,所以你真的应该从最简单的数据分布入手。

13.

最后,终于到了尝试大一点的模型的时候了,比如ResNet-XXX,InceptionNet,XceptionNet等等,都是很好的选择。

同时,你也可以试试之前去掉的东西,比如dropout,batch norm,learning rate decay等等。如果你有条件的话,也可以在多卡上进行训练。

14.

最后的建议是,在使用AI/ML领域的论文中提出的方法时,一定要知道,所有的论文都是为了宣传一个论点而存在的。这些论文很少会提出一个容易实现的方法。因此,选择使用SOTA方法超越的简单的基线方法,常常都是更好的选择。

如何开始一个深度学习项目相关推荐

  1. 如何设计一个深度学习项目

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 我的博客:请点击这里 目前,有很多关于深度学习的线上和线下技术资源.每天,技术人员都会发表很多的新的论文 ...

  2. 开展一个深度学习项目

    https://mp.weixin.qq.com/s/p5RBx8GKyI1IKXaZGREfsw 转载于:https://www.cnblogs.com/nku-wangfeng/p/9024171 ...

  3. 如何看懂一个深度学习的项目代码

    搞深度学习的人,两大必备日常除了读论文之外就是读代码. 深度学习项目代码,小到几百行的测试demo,大到成千万行的开源项目,读起来方法肯定各有不同. 如下图Mask R-CNN项目代码和PyTorch ...

  4. 如何阅读一份深度学习项目代码?

    犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文.毕竟读代码嘛,大家可能都会读.而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度.但笔者还是决定大胆地写一点:就当是给自己设立今后读代码 ...

  5. 深度学习项目代码阅读建议

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|机器学习实验室 犹豫很久要不要把读代码这个事情专门挑出来写 ...

  6. 手把手教你从零到一搭建深度学习项目(附PDF下载)

    来源:机器之心 作者:Jonathan Hui 本文约14000字,建议阅读10+分钟. 本文将会从第一步开始,告诉你如何解决深度学习项目开发中会遇到的各类问题. 在学习了有关深度学习的理论之后,很多 ...

  7. 怎样高效阅读一份深度学习项目代码?

    犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文.毕竟读代码嘛,大家可能都会读.而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度.但笔者还是决定大胆地写一点:就当是给自己设立今后读代码 ...

  8. 手把手教你从零搭建深度学习项目(附链接)

    简介: 在学习了有关深度学习的理论之后,很多人都会有兴趣尝试构建一个属于自己的项目.本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题. 本文由六大部分组成,涵盖深度学习 ( DL ) 项 ...

  9. 经验之谈 | 如何从零开始构建深度学习项目?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在学习了有关深度学习的理论课程之后,很多人都会有兴趣尝试构建一个属 ...

最新文章

  1. golang中的测试命令
  2. 【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
  3. sqlmap mysql案例_sqlmap简单mysql注入演示附截图
  4. 为啥通过MSIE判断浏览器信息
  5. spring-retry_使用Spring-Retry重试处理
  6. [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始
  7. 外设键盘_记得那个被称为‘顶级外设’的国产品牌吗,现在推出这样一把键盘...
  8. .net链接带密码的ACCESS数据库
  9. MySql中 DELIMITER
  10. aws rds监控慢sql_在AWS RDS SQL Server上的SSAS中部署表格数据库
  11. BOM组件物料重复检查
  12. 服务器文件夹只读属性,修改云服务器上文件夹只读属性
  13. top 显示按照内存、CPU排序
  14. Matlab2014的下载和安装过程
  15. c++中虚基类表和虚函数表的布局
  16. vue随笔1-element-UI中checkbook多选框-复选框样式修改
  17. MySql 笔记(五)InnoDB引擎页分裂与页合并的原理
  18. LCCUP 力扣杯2020秋季编程大赛题解
  19. 编程之路第11天:解决此前截屏权限需要手动点击确认问题(打开双线程)
  20. Windows下使用Docker搭建Kafka

热门文章

  1. Cere Network将在DAOMaker平台启动首次种子私募轮社区融资
  2. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌2.77%
  3. Glassnode:比特币正迎来多年以来最大的流动性枯竭
  4. ETH突破620美元关口 日内涨幅为5.36%
  5. C语言讲义——C语言的布尔类型
  6. Unity 叉乘 vector3 四元数 和声音组件
  7. Linux-Shell编程之数组操作
  8. 57、剑指offer--二叉树的下一结点
  9. 2106. [NOIP2015] 斗地主
  10. Python学习之路day3-集合