pytorch与tensorflow怎么选

博文视点 博文视点     2022-12-05     139

关键词:

PyTorch 和 TensorFlow 是目前最主流的两个深度学习框架,绝大多数研究者会选择PyTorch 或者 TensorFlow 进行深度学习的入门学习。图1展示了近两年来几个主流深度学习框架的 Google 指数,其中 PyTorch 和 TensorFlow 的热度不相上下,均遥遥领先于其他框架。

图 1 TensorFlow、PyTorch、MXNet、Caffe 和 PaddlePaddle 的 Google 指数

本文将从以下 4 个方面对比介绍 TensorFlow 和 PyTorch,帮助读者更好地选择学习和使用哪个框架。

1.动态图与静态图

几乎所有的框架都是基于计算图的,计算图可以分为静态图和动态图两种。静态图是先定义再运行(define and run),一次定义、多次运行,这也意味着一旦创建就不能修改。静态图在定义时使用了特殊的语法,就像学习一门新的语言,同时在构建静态图时需要考虑所有的情况,这导致静态图过于庞大,可能占用过多的显存,不过其运行速度相对较快。动态图是在运行过程中被定义的,即在运行时构建(define by run),可以多次构建,多次运行。在构建动态图时可以使用 Python 的 if、while、for-loop 等常见语句,构建更加简单、直观,同时可以方便地进行修改、调试。

TensorFlow 最初选择使用静态图,这样的设计带来了较高的性能,但在构建网络时较为烦琐,用户需要专门学习 TensorFlow 的语法架构才能搭建网络,同时很难调试。PyTorch 选择使用动态图,动态图的设计模式更加符合人类的思考过程,方便查看、修改中间变量的值,用户可以轻松地搭建网络进行训练。目前,TensorFlow 2.0 之后的版本已经支持动态图的构建,并且提供动态图与静态图的转换功能。

2.学术研究和开源代码

人工智能作为一个新兴学科,仍需进行大量研究、探索以解决各种问题。图2展示了近两年来几个主流深度学习框架在开源的学术论文中所占的比例(数据来源于Paperswithcode),其中 PyTorch 凭借其易用性和大量的开源资源在学术界遥遥领先。以2021 年 6 月的数据为例,PyTorch 所占的比例几乎是 TensorFlow 的 6 倍。随着开源资源数量的逐步增多,这种领先优势也会逐步扩大。

图2 几个主流深度学习框架在开源的学术论文中所占的比例

3.工业化

工业界更加关心如何将深度学习算法部署到各种架构的平台上,TensorFlow 凭借其完备的功能支持受到了工业界的广泛欢迎。TensorFlow 提供了 TensorFlow Serving和 TensorFlow Lite,可以便捷地将训练好的模型部署到集群以及移动设备上。同时,TensorFlow 开源较早,许多公司已经建立起完整的使用 TensorFlow 开发、部署的模式,这对于追求稳定性的工业界十分重要。不过,受限于 TensorFlow 2.0 版本后的接口变动,许多成熟的模型并不能直接在新版本的 TensorFlow 上运行。而 PyTorch 曾经在工业化部署方面相对较弱,但是背靠 Facebook 数十亿用户,近些年来,PyTorch 团队也在着手进行完善。PyTorch 于 2020 年 4 月发布了 TorchServe,以帮助用户灵活地进行模型部署。同时,PyTorch 对 ONNX(微软定义的一种开放式的文件格式)和 TensorRT 的支持也愈加丰富。然而,对于部分复杂的算子,仍然需要重新进行设计。

4.学习成本

TensorFlow 作为一个相对底层的系统,它创造了许多全新的概念,用户近似需要学习一门新的语言。TensorFlow 最令人诟病的是它混乱且频繁更新的接口设计:同样的功能提供了多种实现,对接口的设计没有考虑向后兼容性等。虽然有关 TensorFlow的文档、教程很多,但是整体而言层次性不强,用户很难快速地使用 TensorFlow 完成具体的任务。

而 PyTorch 更多地从算法工程师的角度考虑,它的接口风格与 NumPy 类似,Python用户可以便捷地使用 PyTorch 搭建模型,并进行调试。同时,PyTorch 提供了完整的文档、循序渐进的指南以及作者亲自维护的论坛供用户交流问题。

总体而言,TensorFlow 是一个十分完备的系统,在开发它时主要从系统设计的角度出发,目标十分宏大,力求成为最强大的深度学习框架。然而,作为一个还在快速发展探索的领域,人工智能研发人员实际需要的可能并没有这么复杂,他们更加希望快速地实现和尝试自己的想法,这也是为什么半路出家的 PyTorch 能够异军突起,一举成为最受欢迎的深度学习框架之一(可能没有“之一”)

为什么选择 PyTorch

PyTorch 作为最受欢迎的深度学习框架之一,它主要有以下几个核心优势。

• 易用:编程是一项智力劳动,通过易用的工具可以最快地实现用户的想法。最易用的程序就是用户需要学习新东西最少的程序,换句话说,最易用的程序就是最切合用户已有知识的程序。PyTorch 具有 Pythonic 设计风格,以及与 NumPy 类似的接口,Python 用户可以快速、方便地使用 PyTorch 搭建模型。同时,PyTorch 官方提供了层次分明的文档,用户的学习成本较低。基于动态图的优势,用户可以方便地调试 PyTorch 代码。PyTorch 的设计符合人们的思维,它让用户尽可能地专注于实现自己的想法,所思即所得,不需要考虑太多框架本身的束缚。

• 简洁:PyTorch 的设计追求更少的封装,尽量避免重复造轮子。PyTorch 的设计遵循 Tensor→autograd→nn.Module 三个由低到高的抽象层次,其分别代表高维数组、自动求导和神经网络。这三个抽象之间的关系紧密,可以同时进行修改和操作。简洁的设计带来的另一个好处就是代码易于理解。更少的抽象、更加直观的设计,使得 PyTorch 的源码十分容易阅读,使用 PyTorch 搭建的模型也更加清晰、直观。PyTorch 的设计真正做到了“Keep it Simple, Stupid”,与 UNIX 的简洁之美如出一辙。

• 生态:PyTorch 拥有最多的开源模型,这意味着无论研究什么领域,用户都可以轻松找到相关源码进行研读。关于深度学习的绝大多数前沿研究是使用 PyTorch 进行的,许多顶级会议开放的源码也使用 PyTorch 构建。如果读者想要学习最新的算法,并将其应用在实践中,那么 PyTorch 将是不二之选。同时,PyTorch 有着优秀的社区,用户可以方便地交流和求教问题。背靠 Facebook,PyTorch 的开发者也会根据用户的反馈不断迭代更新 PyTorch。

• 拓展:PyTorch 凭借其易用性与简洁性成为最受欢迎的深度学习框架之一。目前,许多国产的深度学习框架(如 Jittor、MegEngine 等)的接口风格均与 PyTorch 保持一致,以此降低用户的学习成本。读者在掌握了 PyTorch 的基本用法后,可以很容易学习和使用新的框架。

总体而言,PyTorch 十分适合作为用户学习的第一个深度学习框架,相信用户在学习和使用的过程中会逐渐爱上 PyTorch,并使用它打开深度学习和人工智能的大门。

本文节选自《深度学习框架PyTorch:入门与实践(第2版)》一书,本书第 1 版于 2018 年出版,当时主流的 PyTorch 版本为 0.3。随着 PyTorch 的不断更新迭代,许多函数接口已经被舍弃,同时新增了许多更加实用的功能接口。在本书第 1 版出版后,许多读者通过各路渠道提出了不少好的建议与意见,综合这些建议与意见,作者对本书内容进行了较大程度的修订重新再版。


这本新书全彩印刷,是初学者AI入门好书,可以从零开始完成经典而有趣的实际项目,附赠源代码文件!原价159元,扫码或者点击阅读原文均可享受6折优惠价,推荐深度学习的初学者及准备学习实践 PyTorch 的朋友阅读。

tensorflow与pytorch张量互转(代码片段)

1、tensorflow张量转pytorch张量tensorflow(Tensor)–>numpy.ndarray–>pytorch(Tensor)importtorchimporttensorflowastftf_tensor=tf.constant([1,2,3])withtf.compat.v1.Session().as_default(): np_array=t 查看详情

tensorflow与pytorch张量互转(代码片段)

1、tensorflow张量转pytorch张量tensorflow(Tensor)–>numpy.ndarray–>pytorch(Tensor)importtorchimporttensorflowastftf_tensor=tf.constant([1,2,3])withtf.compat.v1.Session().as_default(): np_array=t 查看详情

2022年了,pytorch和tensorflow选哪个?

...a;RyanO'Connor,来源:机器之心坊间传闻:「TensorFlow适合业界,PyTorch适合学界」。都2022年了,还是这样吗?2022年了,你是选PyTorch还是TensorFlow?之前有一种说法:TensorFlow适合业界,PyTorch... 查看详情

tensorflow与pytorch张量互转(代码片段)

1、tensorflow张量转pytorch张量tensorflow(Tensor)–>numpy.ndarray–>pytorch(Tensor)importtorchimporttensorflowastftf_tensor=tf.constant([1,2,3])withtf.compat.v1.Session().as_default(): np_array=tf_tensor.eval()torch_tensor=torch.from_numpy(np_array)2、pytorch张量转tensor... 查看详情

pytorch 与 tensorflow 2.0 的视图等效性是啥?

】pytorch与tensorflow2.0的视图等效性是啥?【英文标题】:whatisthepytorch\'sviewequivalencewithtensorflow2.0?pytorch与tensorflow2.0的视图等效性是什么?【发布时间】:2020-09-2221:15:46【问题描述】:l_conv7=self.loc_conv7(conv7_feats)#(N,24,19,19)l_conv7=l_con... 查看详情

简单介绍一下tensorflow与pytorch的相互转换(主要是tensorflow转pytorch)(代码片段)

本文以一段代码为例,简单介绍一下tensorflow与pytorch的相互转换(主要是tensorflow转pytorch),可能介绍的没有那么详细,仅供参考。由于本人只熟悉pytorch,而对tensorflow一知半解,而代码经常遇到tensorflow... 查看详情

深度学习与图神经网络核心技术实践应用高级研修班-day1tensorflow和pytorch(代码片段)

深度学习与图神经网络-Tensorflow和Pytorch1.TensorFlow和Pytorch2.TensorFlow简介3.TensorFlow的API4.Pytorch简介5.Python安装6.TensorFlow安装7.Pytorch安装1.TensorFlow和Pytorch2.TensorFlow简介TensorFlow最初是由GoogleBrain团队(隶属于Goo 查看详情

比较 Conv2D 与 Tensorflow 和 PyTorch 之间的填充

】比较Conv2D与Tensorflow和PyTorch之间的填充【英文标题】:ComparingConv2DwithpaddingbetweenTensorflowandPyTorch【发布时间】:2019-03-2906:33:27【问题描述】:我正在尝试将从Tensorflow模型中保存的权重导入PyTorch。到目前为止,结果非常相似。当... 查看详情

如何高效入门pytorch?深度学习框架是pytorch还是tensorflow?(代码片段)

...来谈谈,如何选个合适的教程,避开它们。一、Tensorflow VS  PyTorch    在这之前,有一个问题肯定困惑大家很久了,2021年了,TensorFlow和PyTorch两个深度学习框架学哪个好呢   ​没有水晶球,我也不知道... 查看详情

将 TPU 与 PyTorch 一起使用

...正在尝试使用Colab的GoogleCloud的TPU。我能够按照教程使用Tensorflow做到这一点。有人知道是否可以使用PyTorch来使用TPU?如果是这样,我该怎么做?你有什么例子吗?【问题讨论】:【参考方案1】:目前,无法将CloudTPU与PyTorch结合... 查看详情

如何在 TensorFlow、Keras 或 PyTorch 中部署 CoreML 模型?

】如何在TensorFlow、Keras或PyTorch中部署CoreML模型?【英文标题】:HowtodeployCoreMLmodelinTensorFlow,KerasorPyTorch?【发布时间】:2020-12-2421:58:14【问题描述】:CoreML模型的教程都是将TensorFlow模型或PyTorch模型转换为CoreML模型。如果预训练好... 查看详情

pytorch和sklearn哪个运行快

参考技术Asklearn和pytorch区别scikit-learn和tensorflow的区别如何学会快速调用APIPytorch之CrossEntropyLoss()与NLLLoss()的区别(原创)sklearn中F1-micro与F1-macro区别和计算原理pandas下的onehotencoder及pd.get_dummies()与sklearn.preprocessing下的OneHotEncoder的... 查看详情

python使用tensorflow检测gpu运行与使用pytorch(代码片段)

GPU运行状态检测在先前,博主完成了GPU环境的配置,那么今天博主来实验一下使用GPU来运行我们的项目使用cmd输入nvidia-smi查看GPU使用情况,下面是Linux里面的一个显示下面是我的运行状态:PS:在运行前需要安... 查看详情

anaconda+tensorflow+pytorch安装

Anaconda安装在清华大学TUNA镜像源选择对应的操作系统与所需的Python版本下载Anaconda安装包。Ubuntu环境下在终端执行  $bashAnaconda2-4.3.1-Linux-x86_64.sh#Python2.7版本或  $bashAnaconda3-4.3.1-Linux-x86_64.sh#Python3.5版本在安装的过程中,会询... 查看详情

tensorflow难敌pytorch,终是败下阵?

...地方就有江湖。近几年来,在机器学习框架上,TensorFlow与PyTorch的角逐引发众人关注,几经迭代,谁才是更好的框架,本文进行了一波详细的比对,希望对你的技术选型提供一定的参考价值。原文链接:... 查看详情

pytorch-入门与安装(代码片段)

tensorflowvspytorch 现在关于深度学习的框架很多,详情请百度,或者参考本文参考资料1,本文对比两种; tensorflow是当前最流行的深度学习框架,但是pytorch有后来居上的意思,其实二者有一定联系;联系:都是基于计算图... 查看详情

如何在 pytorch 和 tensorflow 中使用张量核心?

】如何在pytorch和tensorflow中使用张量核心?【英文标题】:Howtousetensorcoresinpytorchandtensorflow?【发布时间】:2021-12-2823:30:01【问题描述】:我正在使用带有张量核心的NvidiaRTXGPU,我想确保pytorch/tensorflow正在使用它的张量核心。我在... 查看详情

『开发技巧』macbookm1芯片深度学习环境配置最全教程:简明安装开发tensorflow与pytorch(代码片段)

文章开始书写时间:2022-03/19-14:300x00​:引子最近云哥@吃货本货问小宋(笔者)如何在Apple的M1芯片进行深度学习开发,恰逢最近M1开发生态都趋于稳定,就把安装步骤梳理下分享出来。​0x01:分析... 查看详情