当前位置: 首页 > news >正文

百度官方文档Plus版,PaddlePaddle深度学习框架介绍

作者:木羊同学

来源:华章计算机(hzbook_jsj)

 

现在深度学习框架不但内卷严重,而且头部效应明显。一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch。究竟排名谁先谁后,还要看你是工业界还是学术界。不过,深度学习框架远不止这两家,只不过,有一些前浪已经镶在墙上,而有一些后浪,同样出自名门,但还在为一个奔涌的机会而不断努力,今天的主角飞桨PaddlePaddle(以下简称“飞桨”)就是其中之一。

 

01

为什么要使用深度学习框架

飞桨是度娘家推出的深度学习框架,在介绍飞桨之前,我们先来聊聊为什么实现深度学习模型,业界通常都会选择使用现成的深度学习框架。

在深度学习刚刚兴起来的时候,大家对深度学习的热情很高,学习的方法也是五花八门,其中有一种特别提倡动手能力,大概是叫“从零开始实现深度学习模型”。这些方法说起来也不复杂,就是使用大家都很熟悉的Python科学运算库Numpy来实现深度学习所需要的各种部件,譬如说后向传播机制。

说实话,我发现我们这种直男式的程序员,好像天生就有一种怀疑精神,非常不信任第三方代码,非常不情愿使用第三方代码,只要调用了第三方的代码,一旦出了问题,就会产生一种“总有刁民要害朕”的气愤。所以,这种“从零开始实现XXX”的教学一直很受欢迎,大家就像鲁迅先生那篇《孔乙己》里面买黄酒的客人一样,非要看着代码一字字的被敲出来才放心。

但是,在深度学习这里,自己敲的代码用来学习还可以,用在生产环境上可能就有点力不从心了。首先就是质量,深度学习大量使用微分运算,譬如所有模型都必须使用的误差后向传播,这种机制实现代码比较复杂,而且出了问题不容易发现,用在生产环境中很可能会会埋了雷。


其次是效率。深度学习是2012年前后热起来的,也就10年不到的时间,但是,这门技术并非只有10年,历史非常悠久。我们知道,深度学习的前身是名叫“神经网络”的机器学习模型,神经网络的身世相当坎坷,两次攀到巅峰然后跌落低谷,每次都要被雪藏个好几十年,人称“神经网络的寒冬”,上一次还是在上个世纪90年代,被另一款机器学习模型支持向量机打得鼻青脸肿。

那神经网络这几年是因为什么才能王者归来,连名字都换成了霸气侧漏的“深度学习”呢?就是因为硬件能力的提升。现在硬件白菜价了,连跳广场舞的大妈都知道了,只要多买GPU,算力就能蹭蹭蹭地往上冒。当然,如果只是硬件便宜了,改变不了什么。你想想,算力提高是大家一起提高,凭什么就得让你深度学习一家独大呢?不好意思,深度学习模型还真有个和在座各位“不太一样”的地方,这就是模型性能和算力能够呈正相关,简单来说,就是只要算力保持“蹭蹭蹭”,模型性能也能跟着“蹭蹭蹭”。

所以,深度学习模型放在GPU上跑已经成了常规操作,但这就涉及了GPU编程,主要是CUDA,这就又要额外学习相关知识。而且,编写来的代码能用是一回事,把性能优化到极致又是另一回事,优化自身就是一个大坑。

最后是便捷。相信看完上面两个原因,大家的“懒癌”也差不多要发作了,徒手搭建一款完整能用于生产环境的深度学习模型,代价实在是太高了,可谓是费事费力难度大。就算你历尽千辛万苦,真的搭建好一个模型,麻烦又来了——深度学习模型长在处于爆发期,推陈出新特别快,更新又该怎办呢?现在业界常见的做法是构建计算图(Computation Graph),通过计算图能够比较精确地描述深度学习模型所需的各种操作,但是实现起来相当麻烦。

02

常见深度学习框架介绍

怎么办呢?简单,直接用成熟的深度学习框架就好了,不但代码质量有保证,不会因为手残导致奇奇怪怪的错误,而且性能(包括GPU运行和分布并行等的性能)可靠。更重要的是,你使用成熟的深度学习框架,你的精力主要是放在模型搭建上,注意力能够更为集中,而不用耗费在底层编码上面。

目前市面常见的深度学习框架一共有5款,都是由国内外知名互联网公司推出,Google的TensorFlow、Facebook的PyTorch、亚马逊的MXNet、微软的CNTK,以及百度的PaddlePaddle。前面的两款,TensorFlow和PyTorch,是现在深度学习行业的扛把子,就份额来看,目前还是出得最早、工程能力最强的TensorFlow占有优势,不过,从口碑来看的话,一般认为PyTorch从文档到到API设计都要更优雅一些,所以,一般有工业界偏好TensorFlow,而学术界偏好PyTorch的说法。

接下来说说后浪MXNet和CNTK。MXNet给我感觉是款走网红路线的深度学习框架,为什么这么说呢?略有了解的人应该都有这种感觉,别看前面TensorFlow和PyTorch名气很大,一般人想得出来一两个开发者的名字吗?不能,但是一提到MXNet,首先想到的可能不是这款框架能干什么,而是框架的开发者李沐博士。李沐博士水平很高,自带大神光环,不过有意思的是,李沐博士写了一本深度学习的书,教学代码当然用的是自家的MXNet来写,大神写的书肯定很多人找来看,然后Github上就有人放出了Pytorch实现的版本,结果一下成了高星项目。

当然,MXNet也确实很优秀也很努力,只是IT行业很多就是这样,一旦市场被人占了先机,后来者就很难再挤出一席之地。深度学习框架也一样,MXNet知道市场的基本盘已经被TensorFlow和PyTorch分完了,正在尝试另辟蹊径,走模型封装的道路。

至于CNTK,我总感觉巨人微软自从网络时代慢了一步之后,真有点一步慢、步步慢的感觉,我个人是很推崇微软的工程能力的,但是微软推出来的几个蹭热度产品,还真的只是蹭热度,蹭蹭就没有然后了。这次在深度学习时代推出来的CNTK好像也延续了这一风格,发布前后热度挺高,不过据说微软内部对CNTK的态度也是“十动然拒”,给我留下的唯一印象就是支持C#,还有就是可以作为Keras的后端,这几年就再没听过CNTK的消息 。写这篇文章的时候我还专门查了一下,CNTK应该还没停更,不过最新的一次发布已经是2019年了。

当然了,深度学习框架远不止这些,譬如知名度很高的还有Theano、Caffe、Torch等等,不过这些基本属于前深度学习时代的深度学习框架,要么是个人要么是小团体开发,有着手撸代码的种种不足,过去主要是研究人员使用,现在已经逐渐退出了历史舞台。

03

百度深度学习框架飞桨PaddlePaddle介绍

度娘家出的飞桨PaddlePaddle是首款国产深度学习通用型框架,既然是通用性框架,可以对于张量(Tensor)进行各种操作是最起码的要求,而作为深度学习框架,搭建神经网络所需的卷积、池化等各类单元层、各类激活函数、损失函数等等基本套件,PaddlePaddle也肯定都得有,至于神经网络离不了的后续传播机制已经成了业界标配,PaddlePaddle也必须得支持。总之一句话,如果你了解其它深度学习框架,你就会发现PaddlePaddle在使用层面也是大同小异。

不过,PaddlePaddle想要和TensorFlow、PyTorch相提并论,就一定会面临前面MXNet一样的困境:既然各家功能差不多,写法也区别不大,那为什么我要选择PaddlePaddle,而不直接用霸榜的那两款呢?

我想这个问题同样也深深困扰着PaddlePaddle团队,所以,他们选择做了两样事情。第一样是主打“国产”。现在技术都很强调国产,特别是未来准备大力发展的关键技术,不怕一万就怕万一。当然了,这只是其一,其二是据百度技术学院参与编写的《飞桨PaddlePaddle深度学习实战》介绍,PaddlePaddle对国产的硬件支持良好,超过了TensorFlow和PyTorch。

主打国产是一条新路子,当然,这还远远不够,所以PaddlePaddle同时还选择了做另一件事,这就是前面介绍MXNet也说过的,主打预训练模型。

什么意思呢?深度学习模型现在性能越来越强大,这当然是好事,但是有人喜有人忧。

前面我们说,深度学习框架可以很方便搭建模型,但是,现在深度学习模型性能越来越强大,同时也意味着模型越来越复杂,哪怕是用了深度学习框架,要准确、快速地完成一款模型的搭建也绝非易事。对于一般的用户,最常见的选择就是等大神搭完了丢出来再用,这就比较看运气了。PaddlePaddle就是看到了这点,官方团队就实现了一些经典的和先进的模型,而且已经训练好了参数,你想使用,只是拿出来就可以用了,非常方便。

譬如说目标检测模型YOLOv3,对于一般人来说,光是看懂原理就不太容易了,但是使用了PaddlePaddle以后,事情就要简单很多。PaddlePaddle有一个组件,叫PaddleHub,是飞桨生态下的预训练模型管理工具。通过PaddleHub获取模型非常简单,只要先找到模型的名称,然后安装模型就可以使用了。在PaddleHub中,采用COCO2017数据集训练的YOLOv3模型称为yolov3_coco2017,想要安装这款模型,只需要执行一条命令:

hub install yolov3_coco2017

模型安装完成之后,无需额外操作即可以直接使用,譬如说进行图片预测。对于想要快速了解模型性能,特别是想通过新模型提升产品性能的同学,这套工具还是非常方便的。

想要进一步了解PaddlePaddle以及周边工具使用的同学,推荐阅读《飞桨PaddlePaddle深度学习实战》,这本书是由百度团队和高校专家共同撰写,既有很强的官方背景,又有很高的学术水平。在内容方面,本书是以深度学习的知识点为主线讲述,可以作为深度学习的教材,而在代码实现时则同时给出了两套方案,一套是通过Numpy的手工实现,一套则是通过PaddlePaddle实现,内容一样,所以对比性很强,更容易理解,而且更为系统。我感觉这本书比PaddlePaddle官方入门文档的编排更为合理,阅读体验更为顺畅,而且既然也是百度官方出品,完全可以视作官方入门文档的Plus版来阅读。

 

作者简介:

莫凡,娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

作者:刘祥龙 杨晴虹 胡晓光 于佃海 白浩杰

深度学习技术及应用国家工程实验室

百度技术学院 组编

书号:978-7-111-66236-5

卖点:

(1)本书由百度官方出品,PaddlePaddle总架构师共同创作。

(2)百度公司CTO王海峰博士作序,张钹院士、李未院士、百度集团副总裁吴甜联袂推荐

(3)“内容全面、由浅入深、注重实践”,结合新近PaddlePaddle技术版本,详细讲解了PaddlePaddle的技术和原理,以及如何从零开始快速掌握深度学习。

 

推荐语:百度官方出品,百度公司CTO王海峰博士作序,张钹院士、李未院士、百度集团副总裁吴甜联袂推荐!结合新近PaddlePaddle版本,融合大量实践案例,让你从“零基础”到“全精通”,深入掌握深度学习的知识

 

 

更多精彩回顾

书讯 | 1月书讯:Hello 2021! (上)

书讯 | 1月书讯:Hello 2021! (下)

资讯 | TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!

书单 | 适合的才是最好的,小众数据库黑马不可小觑

干货 | 刚刚拿下「中国AI最高奖」的语音技术,能给我们带来什么?

收藏 | “绿宝书”好在哪?前端大佬们都在推荐

上新 | ECharts开山之作,官方推荐!精心规划适合初学者的ECharts学习路径!

赠书 | 【第39期】打破“打工人”魔咒,RPA 来狙击!

点击阅读全文了解更多AI好书

相关文章:

  • 华为首席开源联络官执笔,带你了解5G时代的边缘计算
  • 寒假到了,神兽归笼?程序员整治“熊孩子”有妙招
  • 读完《Effective Java》后,我总结了 50 条开发技巧
  • 手把手教你如何制作可视化大屏!
  • 使用 SQL 语句实现一个年会抽奖程序
  • 构建全球第三大移动生态,2021年,华为HMS生态要起飞了!
  • 2020年云原生技术关键趋势总结
  • 【第40期】不可错过的数据挖掘好书
  • 6个关键步骤,手把手教你构建图模型
  • 六个步骤实现数据埋点方案设计
  • 深度解析DDD中台和微服务设计
  • Apache ECharts 5 震撼发布:五大模块,十五项新特性全面升级!
  • ClickHouse大数据领域企业级应用实践和探索总结
  • 官宣了!Apache ECharts 毕业成为 Apache 软件基金会顶级项目!
  • 受了中台的伤?给你一本疗伤手册
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • ➹使用webpack配置多页面应用(MPA)
  • es的写入过程
  • JavaScript的使用你知道几种?(上)
  • Median of Two Sorted Arrays
  • MySQL几个简单SQL的优化
  • React-生命周期杂记
  • vue 配置sass、scss全局变量
  • WebSocket使用
  • windows下mongoDB的环境配置
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 面试总结JavaScript篇
  • 模型微调
  • 入门级的git使用指北
  • 手机app有了短信验证码还有没必要有图片验证码?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #WEB前端(HTML属性)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net framework profiles /.net framework 配置
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 受管制代码
  • /var/lib/dpkg/lock 锁定问题
  • @Controller和@RestController的区别?
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [BUUCTF]-Reverse:reverse3解析
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [EFI]英特尔 冥王峡谷 NUC8i7HVK 电脑 Hackintosh 黑苹果efi引导文件
  • [hive小技巧]同一份数据多种处理
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [LeetCode] Merge Two Sorted Lists
  • [LeetCode]Spiral Matrix