深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

随着深度学习关注度和势头上升,深度学习被越来越多的企业和组织的生产实践结合起来。这时,无论是对于深度学习相关专业的初学者,还是已经在企业和组织中从事工业场景应用和研发的开发者来说,选择一个适合自己,适合业务场景需求的深度学习框架显得尤为重要。

那么,对于不同学习阶段和不同岗位的开发者来说,什么样的深度学习框架才是适合自己的呢?为此,AI 前线邀请了来自BAT的深度学习框架专家来解答这个疑问。

以下是选择深度学习框架时常见的几个问题:

目前,国内外有哪些主流的深度学习框架?分别有什么优缺点?

TensorFlow:谷歌大厂出品,社区资源丰富,用户群体广泛。如果你的业务是实现一个比较成熟的应用场景,选择TensorFlow是个不错的选择,毕竟大部分坑前人已经踩过了。如果你还是一名初学者,想要去实现全新的算法,那要慎重选择TensorFlow,因其发展时间较久,代码库庞大,想要真正看懂它的代码会是一个不小的挑战。

PaddlePaddle:百度出品,跟TF类似,PaddlePaddle也是在百度内部实际应用的工业框架。值得一提的是,PaddlePaddle为大量工业级模型提供官方支持;大规模分布式训练技术能力强,支持大规模稠密参数和稀疏参数场景的并行训练;基于其中文文档友好、简单易上手的特点,社区活跃度不断提高。本土开发者中文交流非常方便。PaddlePaddle 已经升级为全面的深度学习开发套件,除了核心框架,还开放了VisualDL、PARL、AutoDL、EasyDL、AI Studio等一整套的深度学习工具组件和服务平台,更好地满足不同层次的深度学习开发者的开发需求。18年百度加大了生态投入,在工业制造、农林领域有不少案例,对于想要落地应用场景,特别是针对中文语言处理的场景和大规模推荐场景,PaddlePaddle或许是个不错的选择。

PyTorch+Caffe2:脸书出品。PyTorch前身是Torch(一个基于Lua语言的深度学习库)。PyTorch 灵活性相比TensorFlow大大增强,支持动态构图,开发者可以随时改变神经网络的结构。PyTorch今年因其易用性表现突出,越来越受到学术界的青睐。如果你是一名初学者,想要去复现前沿的算法,推荐使用PyTorch。如果你是工业场景开发者,最好先搜一搜是否已经有使用PyTorch的成功落地案例。因为在运算效率、工业部署上,PyTorch还不算成熟。Caffe2为生产环境设计,提供在各种平台(包括移动设备)的运行时。Caffe2意在弥补Pytorch在生产环境的不足,目前还没有看到太多开发者反馈Caffe2的工业表现,需要更多时间验证。

MxNet:已被亚马逊 (Amazon) 选为 AWS 上的深度学习框架,支持动态图计算。优势是高效小巧,更适合自定义需求高的公司和研究者。如果你的工作需要对框架进行修改时,改MxNet要比改TF高效多了。MXNet的用户相比其他框架并不算太多,有少量拥戴者。MXNet在文档质量方便经常被诟病,新手还需要多磨合一下。
Keras:是一个用于快速构建深度学习原型的高层神经网络库,Keras由纯Python编写而成,并基于Tensorflow、Theano以及CNTK后端。Keras隐藏了大部分的内部运算,对于新手来说非常友好。如果想要快速入门,建议可以选择Keras。但真的想成为深度学习大拿,还是要手动从零开始写一个神经网络的代码,否则容易依赖于Keras的易使用性而忽略底层原理。

XDL:阿里出品。X-Deep Learning (XDL) 是针对特定工业级场景(比如广告)深度学习问题的解决方案,而不是与其他框架并列的底层框架。实际上,XDL 采用桥接的方式支持使用 TensorFlow 和 MXNet 作为单节点的计算后端。对于已经使用TensorFlow、MXNet的开发者来说,如果需要在大规模稀疏场景应用可以选择XDL试试, XDL依赖于阿里提供特定的部署环境,对非阿里系用户不是很人性化。

不同学习阶段、不同岗位的开发者,面对不同的业务场景需求应该选择什么深度学习框架?选择和衡量的标准是什么?

不同类型的用户,选择和衡量的标准会有一定差异。选择框架通常要考虑易用性、性能、社区、平台支持等问题。初学者应该考虑容易上手的框架。偏研究性的开发者,一般选择易用而且有领先的模型基线的框架。偏工业应用的开发者可以考虑使用稳定性高、性能好的框架。比较高阶的用户,往往需要同时掌握多个框架。最新的开源算法可能会基于某个框架,掌握多个框架可以更快复现前沿成果。同时不同框架在不同模型上有性能差异,掌握多个框架也可以选择在某个场景下最适合的框架。

在选择深度学习框架时有哪些经验可以分享?需要考虑哪些因素?

开发者通常用深度学习框架组建网络,去解决实际企业级业务中的具体问题,比如:词法分析、机器翻译等。选择框架时通常需要关注以下一些因素:

  1. 框架是否已经官方支持了当前最好的算法,比如中文词法分析任务。
  2. 框架是否高效。同样的算法用不同框架实现,训练速度更快,意味着更少的线下资源,更快的迭代速度;预测速度更快,意味着实际部署时可以为企业节省大量的机器资源,也具有更高的响应速度。
  3. 框架的接口是否容易使用。

掌握一个深度学习框架,开发者需要做哪些准备?

在开发者已经学习 Python 程序开发和深度学习基础知识的前提下,掌握一个深度学习框架,开发者需要了解框架的基本原理,学习并掌握框架的基本概念和用法。

  1. 通常可以先从官方文档开始,通过大致浏览官方文档对框架基本概念和用法有一个大致的了解。
  2. 另外可以结合官方提供的快速入门例子,在自己的机器上安装并练习使用。
  3. 然后可以再从官方的模型库里面挑选一些算法,进行学习参考。
  4. 结合自己具体任务组建网络,查看API接口文档,解决实际任务。

深度学习框架能“包治百病”吗?是否适用于所有应用场景需求?

需要提醒大家的是,深度学习框架不能包至百病,深度学习框架能够解决的是适合使用深度学习技术的应用场景。

深度学习(DL)是机器学习(ML)的一个分支,也是当下最流行的机器学习方法,虽然近几年在图像、语音、自然语言处理等应用方向,深度学习技术都取得了突破性的进展,但是我们依然不应该神话深度学习,认为深度学习无所不能。

适合掌握深度学习的任务应具备这样一些特点:

一、具备大量样本数据。如果样本数据难以获取或者数量太少,我们认为就不适合深度学习技术解决
二、样本数据对场景的覆盖度足够完善。深度学习模型的效果完全依赖样本数据表现,如果出现样本数据外的情况,模型的推广性会变差
三、结果对可解释性的要求不高。如果应用场景不仅要机器能够完成某项任务,还需对完成过程有明确的可解释性,这样的场景就不那么适合深度学习。

中国的深度学习框架有哪些不同于欧美国家主流深度学习开发框架的特点和创新?

从深度学习框架的特点来讲,中国和欧美的的区分未必是一个合适的分类方式。很多中国深度学习框架研发的主体是中国工程师,也是在中国公司成长起来的,自然对国内的实际应用特点把握得会更精准,而且在中文文档、中文教程以及中文模型配套上是独具特色的。

未来,框架发展会出现哪些趋势?

首先,当前仍处于深度学习研究和应用的持续火热期,深度学习框架及平台在研究界和工业界的需求仍持续增长。深度学习框架和平台在产业界的市场占有还未进入稳定期,当然未来一段时间应该也不会出现完全一家独大的垄断局面。一方面整体的市场需求是很大也很多样化的,另一方面不同框架在特性及发力点上自然会有一些差异性的适配。随着深度学习在各行各业的广泛应用,服务能力强的、更贴近用户需求的框架会有更大的提升机会。

过去一段时间,动态图的灵活性、易用性展现出对科研人员极大的吸引力,更多框架开始支持动态图,但需要进一步解决动态图下的性能优化问题。因为在工业界,训练效率和规模化始终是最重要的。所以,各框架取长补短趋同性比较明显,前端易用性、计算高效性、框架稳定性成为持续优化方向。当然,不同框架的先天基因的特性还是非常明显的。
    
此外需要注意的是,AI专有芯片也在快速发展,框架和底层芯片的软硬结合一体化研发也日益引起关注。AI应用部署场景快速扩张,框架对各硬件平台的快速部署和高效推理能力变得非常重要。整体而言,需要支持多硬件的高效计算。这也使得框架内部架构上倾向于更好的抽象分层,保持整体逻辑的统一性和异构硬件执行的高效性。

另一方面,深度学习框架的内涵也在延展。深度学习框架的出现本身就是为了深度学习研究、实验和应用的便利性,节省了开发者很大的编程代价。但对于深度学习技术而言,网络设计其实也是非常重要的一环,基础的深度学习框架是无法解决这个问题的。所以当下神经网络结构的自动设计AutoDL技术就成为新的热点,也和深度学习框架进行更紧密的结合

从便利深度学习技术应用来讲,只靠开源框架还是不够的,需要场景化组件、模块、平台和产品的组合打法,框架之上的平台、配套组件构成的深度学习全流程解决方案对实际应用非常关键。若想深度学习框架在实际应用中发挥更大作用,是需要更全面的综合服务配套建设的

如何看待接下来的框架之争?

随着深度学习技术的普及,各家框架的成熟化,深度学习技术的门槛会越来越低。在研究场景中,好用、灵活易扩展是最重要的考量因素,从目前的趋势来看,PyTorch在易用性上有一定优势。PaddlePaddle在实际生产场景中,框架的易用性、稳定性、生态资源的丰富度将取代技术的领先性成为开发者更重要的考量因素。从这点上,拥有完整生态资源、有实际应用场景支撑的框架会争夺到越来越多的企业开发者用户。在国外,依赖于谷歌生态的 TensorFlow,依赖于 AWS 云生态的MXNet,未来都有一定的机会。

想要形成自己的产品生态,需要哪些必备条件?

想要形成自己的产品生态,需要具备四大条件:
一、 掌握能为最终用户提供巨大收益的核心技术。如深度学习领域框架所涉及的异构计算、并行训练、多路通信、多端部署及核心算法等关键技术。厂商需要拥有深度学习核心技术并形成自己的特色,才具备了生态号召力。
二、 核心产品或服务能够规模化地应用和落地。在生态拓展的过程中,厂商有能力通过平台和资源沉淀足够多的通用解决方案。
三、 能为最终用户提供全面的体验。深度学习框架应用门槛较高,真正在企业广泛落地,还有很多的工作要做,比如结合企业需求的深度定制优化、深度学习配套工具建设、细致的企业服务等等,这要求厂商能够有效整合生态系统中的各个伙伴能力,为最终用户提供更全面的产品体验。
四、 拥有持续创新的能力。厂商应该有足够的资金和动力让核心技术和产品持续创新,使得生态系统的用户相信核心业务能够一直使他们受益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux+CLion+cmake 动态链接库的使用

在作《剑指offer》中的单向链表的题目时,需要一些常用到的操作链表的函数放在一个文件下,我想把这些函数的声明都写在list.h文件中,把这些函数的定义都写在list.cpp文件中,这样就可以在测试文件test.cpp中调用list.cpp中定义的函数…

PAT(乙级)1009

1009. 说反话 (20)给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母&…

库存扣减问题

2019独角兽企业重金招聘Python工程师标准>>> 并发减库存 并发扣库存问题总结 库存扣减还有这么多方案? | 架构师之路 转载于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 问题 在企业网络到外部的连接方案中,要求不高的条件下可以是单出口。一旦该出口线路出现问题,整个企业网络就不能连接到外网了。为了使得企业网络到外网连接的高可用性,可以设置两个以上的出口,然而多个出口对…

java 的 CopyOnWriteArrayList类

初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList,是在研究JDBC的时候,每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的,为了证明这一点,贴两段代码,第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趋势!AI将进军了37%的企业

2019独角兽企业重金招聘Python工程师标准>>> 市场研究机构Gartner调查了全球89个国家的逾3,000名信息长(CIO),显示有37%的企业已经或打算于近期内部署人工智能(AI),在4年内成长270%。Gartner研究…

CMakeLists.txt编写规则

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四个子文件夹。 src文件夹用来存放所有的.cpp文件,include文件夹用来存储所有的.h文件, lib中存放生成的自己编写的共享库, bin中存放所有的可执行文件 用SET来设置.exe可执行文件和共享…

nginx.conf配置详解

######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数。 worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /usr/local…

更新 hadoop eclipse 插件

卸载hadoop 1.1.2插件。并安装新版hadoop 2.2.0插件。 假设直接删除eclipse plugin文件夹下的hadoop 1.1.2插件,会导致hadoop 1.1.2插件残留在eclipse中,在eclipse perspective视图中有Map/Reduce视图,可是没有图标,新建项目也不会…

【K8S学习笔记】Part1:使用端口转发访问集群内的应用

本文介绍如何使用kubectl port-forward命令连接K8S集群中运行的Redis服务。这种连接方式有助于数据库的调试工作。 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同。 0x00 准备工作 在进行该操作之前,需要满足以下条件&#xff1a…

Ubuntu 16.04 桌面菜单栏 任务栏 标题栏消失的解决办法

将home目录下的.cache删除掉就可以了 & cd & sudo rm -r ./.cache

瓜子二手车发12月二手车价格:汉兰达奥德赛CR-V保值率居首

中新网1月22日电 日前,基于海量个人对个人的二手车成交数据,瓜子二手车公布了12月全国及多个核心城市的二手车交易“瓜子价”数据。数据显示,2018年12月全国瓜子二手车严选直卖签约均价为87934元,环比上涨0.16%,同比上…

概率分布之间的距离度量以及python实现(三)

概率分布之间的距离,顾名思义,度量两组样本分布之间的距离 。 1、卡方检验 统计学上的χ2统计量,由于它最初是由英国统计学家Karl Pearson在1900年首次提出的,因此也称之为Pearson χ2,其计算公式为 (i1,2&…

Windows vs Linux:\r\n 与 \r

Linux 下文本文件的换行符为 \nWindows 下文本文件的换行符为 \r\n,占两个字节: \r:归位键(CR),ascii 码为 13\n:换行键(LF),ascii 码位 10也即单行无换行文本…

C++求职题

文章大部分内容转载https://www.cnblogs.com/lanxuezaipiao/p/4127904.html 1.冒泡排序法: 如果有N个数字需要排序,那么需要进行(N-1)趟循环,第i趟循环需要对比的次数为(N-i)。所以可以用双重循环,外层循环用于控制循环的趟数&a…

Python-爬虫-requests

简介 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)#注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码&am…

JS如何监听动画结束

场景描述 在使用JS控制动画时一般需要在动画结束后执行回调去进行DOM的相关操作,所以需要监听动画结束进行回调。JS提供了以下事件用于监听动画的结束,简单总结学习下。 CSS3动画监听事件 transitionEnd事件 transitionEnd事件会在CSS transition动画结束…

封装一个ViewPager真正的实现图片无限循环滚动带导航点

效果图: 大家在写项目的过程中常常会碰到须要实现Viewpager里面载入几张图片来循环自己主动轮播的效果,假设不封装一下的话代码分散在activity里面会显得非常乱。并且也不利于我们下次复用,所以这里我把viewpager的相关代码抽取出来放在了一个…

毕业论文页眉页脚页码插入

用word这么多年,第一次完整的操作了一遍页眉页脚页码的插入过程,其实三者都要要求奇偶页不同 1.页面布局-》右下角箭头-》版式-》奇偶页不同 因为文章不同的部分需要插入不同的页眉页脚页码,所以要在不同的部分插入分解符断开它们的连接 2、…

巴黎市中心降下2019年第一场雪

当地时间1月22日,法国巴黎市中心降下2019年第一场雪,气温也随之下降,街上的行人和车辆均有所减少。中新社记者 李洋 摄一对情侣在埃菲尔铁塔前合影留念。无家可归者在长椅上睡觉。游客在卢浮宫前拍照。