社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

从0到1,带你入行工程深度学习

EasyCharts • 7 年前 • 776 次点击  

   学宽兄,是我在香港理工大学认识的IT大神,同济大学的计算机硕士,实力自然不用多说。我愿意为他背书!哈哈哈哈

----张杰         


深度学习在去年应该可以算作它的一个爆发期了,各种各样的相关成果层出不穷,笔者自己甚至都很难再将领域里的文章细致的扫一遍。越来越多的人开始关注深度学习,全国的各大高校也开始设置机器学习人工智能的相关专业与课程。

深度学习技术的发展也带来工业界传统机器学习算法的革新换代。无人驾驶、OCR、语音识别、情感分析等等,越来越多的人工智能技术被用于各种各样的领域产业中,越来越多的人选择搭上智能化发展的高速列车,投身到相关的行业中。

他们有的是刚刚迈入大学校园的学子,有的是在企业中耕耘多年的工程师。对于初入行业的人而言,都希望快速入门深度学习。

而不同于理论学习,工程实践中的深度学习更需要长时间的积累,才能够体会到其中的各种技巧和经验,比如:

  1. 我们在设计深度网络的时候有什么技巧和原则吗?

  2. VGG、ResNet 网络如何应用在实际的芯片上?

  3. BN 层应该放在哪里比较合理?

  4. 网络越深越好还是越宽越好?

  5. 训练时如此多的优化方法,一定是 SGD 吗?

  6. 学习率怎么调比较合适?

  7. 模型迁移、模型剪枝、模型压缩、模型精剪设计,这些该如何去实践?

  8. 序列问题中的 RNN 网络,怎样设计才能够确保网络更好、更快的收敛?

  9. Siamese、Triplet 这样的网络要怎样训练?样本怎么处理、挖掘?

  10. 等等......

笔者在接下来的内容中,结合自己的工程经验,谈一谈工程中的深度学习需要注意什么?

关于深度网络设计技巧

在解决实际工程任务的时候,深度网络的设计一定是轻巧型的。因为大多数人工智能产品主要是运行在终端设备中,可能是手机、机器人、车载系统等等,这些场景中,往往很难提供大的计算量和存储空间来跑一些复杂的模型、网络。

因此,虽然 Resnet、Densenet 等这样的网络虽然效果很好,但依然不会被选择用在这些低功耗、低计算量的场景下。在实际的网络设计中,一定要注意以下几点:

  1. 关注轻量级网路,例如:mobileNet、SqueezeNet、ShuffleNet 等等

  2. 使用小卷积核来代替大的卷积核

  3. 第一层卷积由于图像通道为3通道,因此可以采用大卷积核

  4. 全连接层参数量很大,可以考虑使用 dropout 来对网络进行约束

当然,在实际的使用中,往往还会选择对模型进行压缩、剪枝、量化等各种操作,来减小模型计算量。网络设计的技巧也不仅仅局限于此。

siamese、Triplet 这样的多支网络同单支网络有什么区别?

实际上,在传统的机器学习方法中,一直存在分类(回归)问题和排序问题两种不同的问题,实际上,单支网络往往对应到分类(回归)问题,而多支网络则对应到了排序问题上。

比如:Siamese 网络通过对比两支网络输出特征向量的相似度,而相似度则会用于行人再识别等问题中。

在多支网络中,参数量往往是单支网络的2倍甚至3倍,在实际中直接进行训练时会存在一定难度,因此,多支网络通常会在同级别的卷积层中采用参数共享的策略,来减少可学参数,网络相比来说会更加容易收敛。

另外,多支网络还会存在一个非常严重的问题,就是正负样本比例严重失衡的问题(负样本对数量会远远多于正样本对数量),因此通常多支网络的训练需要进行难例挖掘,且训练周期会比单支网络久一些。

更宽的网络 OR 更深的网络

不管是在学术界还是在工业界,网络更宽更好还是更深更好,一直都是一个值得探讨的问题,有研究表明更深的网络能够带来更优的性能,而更宽的网络同样也能够带来性能的提升,并且相比深度网络会更快的收敛。但是更宽的网络往往意味着更多的参数和更大的模型。

在实际的工程项目中,我们通常会更青睐于更深的网络,当然,这并不意味着更宽的网络无用,在网络太深的时候,会存在梯度消失的问题导致网络不收敛,因此,我们就需要考虑利用更宽的网络来提升性能。

当然,前提是我们要确保平台对于计算量的要求。

框架的选择问题,TensorFlow or Caffe?

再早之前,可能会存在这样的一个选择的问题,因为很多平台可能更适合去跑C代码。

而目前,很多深度学习的芯片已经安全支持 TensorFlow 的 Tensor 运算。因此,在实际的工作和学习中,无论选择 Caffe 和 TensorFlow,都是没有太大问题。


当然,如果我自己来选择,最好的情况是一定是两种框架都去掌握。如果是在没什么太多的精力,大家可以参考如下建议来选择合适自己的框架:

  1. Caffe 入门容易,但是后续想要提升会难一些,因为需要修改 cuda代码等

  2. TensorFlow 入门难,但是熟练以后后期提升会更容易。

至于选择那种框架,可以自行决定。

当然,工程实践中的深度学习相关经验、技巧还有很多,比如:网络如何进行压缩、迁移?针对不同任务如何进行网络选型?

精简网络结构如何设计?模型如何训练能够尽快收敛等等。更多的内容,关注达人课《深度学习工程快速入门》,在这里我们只讲干货。

课程优势

本课程共包括 23 个课时,分为四大部分。主要针对机器学习初学者、深度学习入门者以及其他想从事深度学习相关工作的从业者,分别涉及到深度学习的基本概念,模型原理,不同类别的网络模型,模型设计的基本原则、训练、优化、模型精简等等不同方面。

另外,本课程还通过实际的网络设计,结合相应的原则来解决分类任务、序列任务等,加上动手实践过程,带领大家深入理解网络设计的基本原则和方法,并锻炼深度学习编程能力和技巧。

主要优势可以总结一下几点:

  • 全面的内容、快速入门到实战

本课程内容涉及到工程实战深度学习中的各种概念、问题,内容全面、适合初学者从入门到快速实战,更面向工程开发。

  • 工程实战下的通俗概念阐释

本课程涵盖深度学习各个不同领域涉及到的模型基本原理,并结合工程经验,对这些核心概念进行分析、解释。针对具体的数学推导公式,深入剖析。本课程在第二部分涉及到多个概念,每个课程将配有细致的图示化解释,通俗易懂。

  • 工程实战下的设计原则和技巧

本课程重点介绍深度学习在实际工程实战时会遇到的一些问题,并针对这些问题,给出各种常用的解决技巧,另外,在设计网络时,也给出基本的设计原则,更加符合工程开发。

  • 更加直观的实战代码讲解

本课程对网络设计原则、模型讲解的过程中,会引入大量的深度学习代码,以 Python 语言为主,来对模型、设计技巧、原则等问题进行说明,更加直观。

作者寄语

相信每一个人都有一颗学习的心,任何一个人都不想被时代所抛弃。入行AI,可能是你想了多次后做下的决定。

这里笔者不言对错,但选择了就要坚持下去,为之努力才不负年华。相信,任何一个真正付出的人,都将得到回报。

也许不丰厚,但一定不亏。这里,笔者衷心的希望大家带着实践的精神去学习深度学习,用更多的创造精神和意识来利用AI技术改变世界,争取在新时代中留下你的身影。

深度学习工程应用入门

原价:39.99

限时特价:24.99

试读


最后,预祝每一位准备入行深度学习的朋友,均能够通过自身的学习与努力找到心仪的工作。如果大家有任何疑问和建议,也可以通过读者圈或者在我的知乎专栏【深度学习干货铺】留言与我交流,希望我们能够共同探讨、共同进步。


本文已获授权转载


【书籍推荐】《Excel 数据之美-科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/IoAWyqjEjg
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/20685
 
776 次点击