斯坦福大学CS博士生带来全面解答 用PyTorch还是TensorFlow (斯坦福大学创始人)

文章编号:43523 最新资讯 2024-12-09 PyTorch TensorFlow

雷锋网 AI 评论按:关于深度学习的框架之争一直没有停止过。PyTorch,TensorFlow,Caffe还是Keras ?近日,斯坦福大学计算机科学博士生Awni Hannun就发表了一篇文章,对比当前两个主流框架PyTorch和TensorFlow。

雷锋网 AI 科技评论编译如下:

这篇指南是我目前发现的PyTorch和TensorFlow之间的主要差异。写这篇文章的目的是想帮助那些想要开始新项目或者转换深度学习框架的人进行选择。文中重点考虑训练和部署深度学习堆栈组件时框架的可编程性和灵活性。我不会权衡速度、内存使用情况等性能。

结论

PyTorch更适合于在研究中快速进行原型设计、业余爱好者和小型项目,TensorFlow则更适合大规模的调度,尤其当考虑到跨平台和嵌入式调度操作时。

准备时间

优胜者: PyTorch

PyTorch实际上是NumPy的替代,它支持GPU,有着更高级的功能,可以用来构建和训练深度神经网络。

如果你熟悉NumPy、Python和常见的深度学习概念(卷积层、递归层、SGD等),那么学习Python对你来说会很容易。

而TensorFlow则可以看成是一种嵌入Python的编程语言。当你在编写TensorFlow代码时,它们会通过Python编译成一张图,然后由TensorFlow执行引擎运行。我看到过刚使用TensorFlow的人因为这个额外的间接层而苦思冥想。也因为如此,想用TensorFlow还需要学一些额外的概念,比如会话、图、变量作用域和占位符等。要运行基本模型,还需要更多的样板代码。使用TensorFlow的前期准备时间肯定比PyTorch要长。

图创建和调试

优胜者:PyTorch

创建和运行计算图可能是这两个框架最大的不同。在PyTorch中,图架构是动态的,这意味着图是在运行时创建的。而在TensorFlow中,图架构是静态的,这意味着先编译出图然后再运行。

下面是一个简单的例子,在PyTorch中可以使用标准的Python语言编写for循环结构

for _ in range(T):

h = torch.matmul(W, h) + b

你可以在这段代码的执行过程中改变T的值。而在TensorFlow中,需要使用控制流运算( control flow operation )来创建图,例如tf.while_loop。对于更常见的结构,TensorFlow可以执行dynamic_rnn语句,但是创建自定义的动态计算更加困难。

PyTorch中简单的图架构更容易推导,或许更重要的一点是,它更容易调试。调试PyTorch代码如同调试Python代码,可以使用pdb并在任何地方设置断点。而调试TensorFlow代码并不那么容易,你有两个选择,一是请求会话中你想要检查的变量,二是学习和使用TensorFlow调试器(tfdbg)。

优胜者:TensorFlow

因为PyTorch在逐渐发展,我认为两者之间的差距会缩小到零。然而,目前仍有一些TensorFlow支持但PyTorch不支持的功能,

此外,TensorFlow的contrib包中有更多比PyTorch更高级的函数和模型。

序列化

优胜者:TensorFlow

在这两种框架下保存和加载模型都很简单。PyTorch有一个特别简单的API,既可以保存模型的所有权重,也可以pickle全部类。

TensorFlow的Saver对象也很容易使用,并为检查点(check-pointing)提供了更多选择。

在序列化中TensorFlow的主要优点是可以将整个图保存为协议缓冲区。这包括参数和运算。此外,该图可以通过其他支持的语言(C++,Java)加载。这对不支持Python的调度栈来说至关重要。理论上,在改变模型源代码之后,你想要运行旧模型时它也能有所帮助。

部署

优胜者:TensorFlow

对于小规模的服务器端部署,两个框架都很容易封装在诸如Flask web服务器中。

不过,TensorFlow支持移动和嵌入式部署。可以确定的说,这比包括PyTorch在内的大多数深度学习框架支持功能的都要多。将TensorFlow部署到Android或iOS上确实需要大量的工作,但至少你不必用Java或C++重写模型的整个推理程序。

此外,TensorFlow Serving支持高性能的服务器端部署。我没有使用过 TensorFlow Serving ,因此不能很确信地写出它的利弊。由于机器学习服务使用的频率很高,我猜想这是人们坚持使用TensorFlow的充分理由。除了性能之外,TensorFlow Serving的一个明显特点是,支持轻松地换用模型而不会降低服务性能。

文档

平手

我在两种框架的文档中都找到了我需要的东西。Python的 API在两个框架中都有良好的文档记录,并且有足够的例子和教程来学习这两种框架。

一个比较边缘的问题是,PyTorch的 C语言库大多是无文档记录的,不过这只影响到编写定制的C语言扩展程序,而且这种操作是否有助于软件还存疑。

数据加载

优胜者: PyTorch

PyTorch中用于数据加载的API设计得很好。接口在数据集、采样器和数据加载器中有明确规定。数据加载器接收数据集和采样器,根据采样器的调度,在数据集上生成迭代器。加载并行数据就像把num_workers语句传递到数据加载器一样简单。

我在TensorFlow还没发现特别有用的加载数据的工具,例如readers, queues, queue runners等,都不够好。部分原因是因为将想要运行的所有预处理代码添加到TensorFlow图中并不总是直接的,例如计算时频谱(spectrogram)。

而且,API本身更繁琐,更难以学习。

设备管理

优胜者:TensorFlow

TensorFlow管理设备时的无缝性非常好。通常不需要规定任何东西,因为默认已经设好了。例如,如果GPU可用,TensorFlow将默认在GPU上运行。在PyTorch中,即使支持CUDA,都必须明确地将所有东西移到设备上。

TensorFlow设备管理的唯一缺点是,即使你只使用一个GPU它也会默认占用所有GPU的显存。简单的解决方法是用CUDA_VISIBLE_DEVIceS语句指定显卡。但有时会忘了设置,所以当GPU实际上处于空闲状态时,会显示内存不足。

在PyTorch中,代码需要更频繁地检查CUDA的可用性和更明确的设备管理,当编写能够同时在CPU和GPU上运行的代码时尤甚。另外,将GPU上的PyTorch Variable转换为NumPy数组有点繁琐。

numpy_var = variable.cpu().data.numpy()

自定义扩展

优胜者:PyTorch

在这两种框架中都可以用C语言、C++或CUDA构建或绑定自定义扩展。但TensorFlow需要更多的样板代码,即使它支持多种类型和设备。在PyTorch中,只需为每个CPU和GPU版本编写一个接口和相应的实现。用这两种框架来编译扩展都很直接,并且不需要下载除了pip安装包之外的任何头文件或源代码。

扩展

TensorBoard是用于展示训练机器学习模型过程的可视化工具。它是TensorFlow自带的最有用的功能之一。只需要通过训练脚本中的一些代码片段,就可以查看任何模型的训练曲线和验证结果。TensorBoard作为web服务运行,它可以非常方便地将存储在无头节点(headless node)上的结果可视化。

我在用PyTorch之前一直在用这种功能并尝试找到能替代这种功能的选择。值得庆幸的是,目前至少有两个开源项目支持这种功能。一个是 istensorboard_logger ,另一个是。istensorboard_logger库甚至比TensorFlow中的TensorBoard摘要数据更容易使用,不过需要安装TensorBoard来使用。crayon完全能取代TensorBoard,不过需要更多的设置(支持docker是先决条件)。

是一个更高级的API,可配置后端,支持TensorFlow、Theano和CNTK,也许在不久的将来也会支持PyTorch。Keras就像TensorFlow里的tf.contrib库一样。

我上面没有讨论Keras,不过它使用起来特别容易。它是调试最常用的几种深度神经网络架构最快的方法之一。不过它的灵活性不如PyTorch或core TensorFlow。

谷歌在2017年2月发布了 TensorFlow Fold 。该库构建在TensorFlow之上,支持更多动态图构建,主要优点是动态批处理功能——可以对不同规模的输入数据(如解析树上的递归网络)自动进行批量计算。在可编程性上,它的语法不如PyTorch直接,不过在某些情况下,批量处理带来的性能改进可以让我们忽略语法上的不足。

雷锋网 AI科技评论

原创文章,未经授权禁止转载。详情见 转载须知 。

用PyTorch还是TensorFlow?CS博士生带来全面解答


本文地址: /article/dc51c6bbab8abbc2810a.html
全局中部横幅
全局中部横幅
“ip138.com”的百度权重查询结果 - 站长工具

查询百度权重和百度的关键字排名,查询360权重和360的关键字排名

NBA直播_NBA高清在线直播无插件免费观看_NBA篮球赛程直播网_24直播网

欢迎来到24直播网,本站提供NBA直播免费观看服务,提供全天不间断24小时直播的NBA无插件直播。本站郑重承诺,全场NBA高清直播免费观看,24直播网立志做最好的NBA在线直播网,一起来24直播网体验看球乐趣吧!

王府井书店-网上购书满99元免运费!

王府井书店,致力于提供专业化购书服务.网上购书选择新华书店王府井书店(网上书店),购书放心有保障.王府井书店电话:010-65132842

QQ网站导航大全-LOL网址导航网

LOL网址导航网是专业的上网导航网站,精心收录各类优质热门网站信息,同时提供天气、快递、违章等各种生活便民查询工具网址,为您提供安全便捷的上网导航服务,现已被众多网友设为上网主页,网址导航大全首选LOL网址导航.

西瓜酱豆怎么做_西瓜酱豆的做法_豆果美食

西瓜酱豆的做法,西瓜酱豆怎么做请看步骤:1.豆子泡好煮熟2.香菜,葱备用3.西瓜切小块4.辣椒剁碎5.油热下料炸出香味6.炸好的料油下入豆子7.翻炒一下加入西瓜开始熬三十分钟8.熬成这样放入辣椒9.加入辣椒在继续熬十分钟...

广东省交通规划设计研究院集团股份有限公司

广东省交通规划设计研究院集团股份有限公司

N.biz - 商业搜索,B2B产业网络营销平台!

www.N.biz|商业搜索引擎,是中小企业实现采购搜索和网络营销的B2B电子商务平台。帮助中小企业更快,更有效的达成交易。

深圳市玉鼎康实业发展有限公司, 深圳市玉鼎康船舶服务有限公司-玉鼎康

深圳市玉鼎康实业发展有限公司是一家以初级农产品、鲜肉、果蔬、水产品、冻品的购销为主,餐饮管理为辅的专业化公司。自2006年成立以来,我们一直秉承客户至上、服务至优的全新理念。 深圳市玉鼎康船舶服务有限公司是一家以船舶伙食供应、烟酒供应、船舶物料供应、清污油等服务集一体的专业船舶服务公司。本公司拥有2000多平米的配送中心,并且拥有设施完善的检测室及先进的检测设备,公司设有干货仓、冷冻库、保鲜库及鸡蛋清洗消毒车间,配备有专业冷冻运输车队及专业的食品管理人员和配送团队,确保食品新鲜、质量安全;且配备有专业的物料配送团队,所配物料各类齐全,质量保证,价格合理。 深圳市玉鼎康船舶服务有限公司 深圳市玉鼎康船舶服务有限公司成立于2013年,是一家经过深圳市市场监督管理局的登记注册,通过深圳市交通运输委员会、深圳市出入境检验检疫局、深圳海关、深圳边检等政府部门批准备案、经营的合法企业。并且获得了深圳市交通运输委员会颁发的“港口经营许可证”,和深圳市市场监督管理局颁发的“食品流通许可证”,以及深圳市出入境检验检疫局颁发的“口岸食品生产经营单位卫生许可证”等相关证书。 玉鼎康船舶服务有限公司专业为国内、国际航行的货轮、游轮和客轮提供船舶生活供应链,包括物料、伙食、日用品等服务。船舶服务公司现拥有3000多平方米的仓库中心,储存产品种类齐全,数量充裕;并建有专业的物流冷链配送车队,不仅能满足客户的需求,同时极大缩短供货时间。自成立以来,公司所有员工始终都致力于船舶服务的经营与创新,目前已形成集船舶物资采购、配送及售后服务方面等较为完善的管理体制。

九州数码-云服务器、虚拟主机、域名注册18年知名云计算服务提供商!

九州数码是基于云计算知名的互联网服务提供商,18年专业知名品牌。专业提供云服务器、虚拟主机、域名注册、小程序、企业邮箱等,为用户提供可信赖的企业级公有云服务!

全局底部横幅