科技界的宗教战争一直存在,无论是争论不同操作系统、云服务商或深度学习框架的利弊,只要喝了几杯啤酒,事实就会滑落到一边,人们开始为自己的技术而战,就好像它是圣杯。
只要想想关于IDE的无休止的讨论,有些人喜欢VisualStudio,有些人使用IntelliJ,还有一些人使用Vim等普通的旧编辑器。
类似的战争似乎正在围绕PyTorch和TensorFlow展开。两个阵营都有大量的支持者。两个阵营都有很好的论据来说明为什么他们喜欢的深度学习框架可能是最好的。
虽然如此,但数据说明了一个相当简单的事实。到目前为止,TensorFlow是最广泛的深度学习框架。它每个月在StackOverflow上得到的问题几乎是PyTorch的两倍。
另一方面,TensorFlow自2018年左右以来一直没有增长,PyTorch一直在稳定地获得增长。
PyTorch给人的感觉更像Pythonic
TensorFlow由谷歌开发,可能是2015年末最早出现在深度学习的框架之一。然而,第一个版本使用起来相当麻烦,任何软件的第一个版本往往都是如此。
这就是为什么Meta开始开发PyTorch,作为提供与TensorFlow几乎相同的功能的一种手段,但使其更容易使用。
TensorFlow背后的人很快注意到了这一点,并在TensorFlow 2.0中采用了PyTorch的许多最受欢迎的功能。
一个好的经验法则是,你可以在TensorFlow中做任何PyTorch做的事情。只是你要花两倍的精力来写代码。即使在今天,它也不是那么直观,而且感觉很不像pythonic。
另一方面,如果你喜欢使用Python,PyTorch使用起来感觉非常自然。
PyTorch有更多可用的模型
许多公司和学术机构都没有建立大型模型所需的大规模计算能力。然而,在机器学习方面,规模是王道;模型越大,其性能就越令人印象深刻。
通过HuggingFace,工程师可以使用大型的、经过训练和调整的模型,只需几行代码就可以将它们介入他们的程序中。然而,这些模型中惊人的85%只能与PyTorch一起使用。只有大约8%的HuggingFace模型是TensorFlow独有的。其余的可以用于两个框架。
这意味着,如果你打算使用大型模型,你最好不适用TensorFlow,或者投入大量的计算资源来训练自己的模型。
PyTorch更适合于学生和研究
PyTorch有一个名声,就是更受学术界的赞赏。这并不是没有道理的;每四篇研究论文中就有三篇使用PyTorch。即使在那些一开始就使用TensorFlow的研究人员中—请记住,它更早地来到了深度学习的派对上—大多数人现在已经迁移到了PyTorch。
这些趋势是惊人的,尽管谷歌在人工智能研究方面有相当大的足迹,并且主要使用TensorFlow。
这一点也许更引人注目的是,研究影响了教学,因此也定义了学生可能学到的东西。一个使用PyTorch发表了大部分论文的教授会更倾向于在讲座中使用它。他们不仅在教学和回答有关PyTorch的问题时更得心应手;他们还可能对PyTorch的成功有更坚定的信念。
因此,大学生们可能会得到比TensorFlow多得多的关于PyTorch的见解。而且,鉴于今天的大学生是明天的工人,你可能可以猜到这个趋势的走向……
PyTorch的生态系统发展得更快了
在一天结束时,软件框架只有在它们是生态系统的参与者时才重要。PyTorch和TensorFlow都有相当发达的生态系统,包括HuggingFace以外的训练模型库、数据管理系统、故障预防机制等等。
值得说明的是,截至目前,TensorFlow的生态系统比PyTorch稍微发达一些)。然而,请记住,PyTorch出现的时间较晚,在过去的几年里有相当多的用户增长。因此,人们可以预期,PyTorch的生态系统可能会在适当的时候超过TensorFlow的生态系统。
TensorFlow有更好的部署基础设施
尽管TensorFlow的代码可能很繁琐,但一旦写好,就比PyTorch容易部署得多。像TensorFlow Serving和TensorFlow Lite这样的工具使得部署到云、服务器、移动和物联网设备的工作瞬间完成。
另一方面,PyTorch在发布部署工具方面一直是出了名的慢。虽然如此,它最近一直在迅速缩小与TensorFlow的差距。
在这个时间点上很难预测,但PyTorch很有可能在未来几年内与TensorFlow的部署基础设施相媲美甚至超越。
TensorFlow代码可能会坚持一段时间,因为在部署后切换框架的成本很高。然而,可以想象的是,较新的深度学习应用程序将越来越多地使用PyTorch编写和部署。
TensorFlow不是Python的全部
TensorFlow并没有死。它只是不像以前那样流行了。
其核心原因是,许多使用Python进行机器学习的人正在转向PyTorch。
但Python并不是机器学习的唯一语言。它是机器学习的O.G.,这也是TensorFlow的开发者以Python为中心支持的唯一原因。
如今,人们可以使用TensorFlow的JavaScript、Java和C++。该社区也开始开发对其他语言的支持,如Julia、Rust、Scala和Haskell等等。
另一方面,PyTorch非常以Python为中心–这就是为什么它给人的感觉是如此的pythonic。它有一个C++ API,但对其他语言的支持还没有TensorFlow的一半。
可以想象,PyTorch将在Python中超越TensorFlow。另一方面,TensorFlow凭借其令人印象深刻的生态系统、部署功能和对其他语言的支持,仍将是深度学习的重要参与者。
在你的下一个项目中,你是选择TensorFlow还是PyTorch,主要取决于你对Python的喜爱程度。