TensorFlow败给PyTorch,谷歌:未来就靠你了,JAX

整理 | 彭慧中 责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

谷歌是机器学习领域的开拓者,它于2015年发布开源深度学习框架TensorFlow,开创了现代机器学习的生态系统.TensorFlow一经发布便迅速被开发者热捧,谷歌也由此成为了主流AI产品的领导者。

然而好景不长,在2017年Meta(前身Facebook)发布AI框架PyTorch之后,TensorFlow便逐渐失去了开发人员的青睐。如今,谷歌内部正押宝在一个取代TensorFlow的新AI项目——JAX。

在这里插入图片描述

PyTorch的后来居上

TensorFlow的人气近年来停滞不前,而PyTorch的人气持续攀升。在各个开发者社区,“PyTorch真香”论声势浩大,又在顶会数据上实力压倒TensorFlow,仅在工业界,TensorFlow尚能守住阵地。
在这里插入图片描述
据CSDN最热AI框架排名显示,尽管TensorFlow在中国开发者心中仍然排在PyTorch之前,但使用频率较去年的48%,下降至今年的37%。
在这里插入图片描述
尽管PyTorch和TensorFlow都是基于Python开发的,但在外界看来,Meta则更注重维护开源社区,甚至不惜大量投入资源。而且,Meta关注到了谷歌的问题所在,认为不能重蹈覆辙。他们专注于一小部分功能,并把这些功能做到最好。

如今,开发人员、硬件专家、云服务供应商以及熟悉谷歌机器学习项目的人士一致认为:“TensorFlow已经失去了开发人员的芳心。”其中一些人更是放言:“PyTorch吃掉了TensorFlow的午餐”,这样的比喻可谓一语中的。

专家们表示,由于谷歌犯下一系列战术失误、制定了错误的开发决策以及在开源社区中败给Meta,谷歌在互联网上引导机器学习未来的机会可能正在逐渐消失。PyTorch已俨然成为业余开发人员和科学研究人员的首选机器学习开发工具。

这种疯狂的“猫捉老鼠”游戏是许多率先进入市场的公司经常遇到的问题。例如,谷歌不是第一家建立搜索引擎的公司,却能够从Alta Vista或雅虎等先行者所犯的错误中汲取教训。

在这里插入图片描述

JAX是否能帮谷歌扳回一局?

既然TensorFlow这个“大号”已经练废了,那么是时候改换个“小号”上场了!

熟悉谷歌机器学习工作的人士说,最初,JAX曾面临来自内部的巨大反对。谷歌员工过去一直使用TensorFlow,尽管它使用起来可能很困难,但它早已占领谷歌员工的心智,并融入了他们的习惯。虽然JAX的使用方法要简单得多,但它还是改变了谷歌内部构建软件的方式。

然而,哪有革命不付出代价的呢?JAX现在不仅在谷歌中铺开来,并且很多大厂及其研究团队中也采用了它,譬如2020年DeepMind就正式投入JAX的怀抱。现在,JAX有望在未来几年成为所有使用机器学习的谷歌产品的主流,就像曾经的“老大哥”TensorFlow那样。

JAX有望胜出的秘密武器则是提供了一个更直接的方法用于处理机器学习中最复杂的问题之一:多核处理器调度问题。根据所应用的情况,JAX会自动地将若干个芯片组合而成一个小团体,而不是让一个去单打独斗。如此带来的好处就是,让尽可能多的TPU片刻间就能得到响应,从而解决了谷歌内部的一个心头大患:快速访问TPU。

“JAX是一项工程壮举!”Julia 编程语言创建者 Viral Shah 说道,“我认为JAX是一种通过Python实例化的独立编程语言。如果你遵守JAX想要的规则,它就可以发挥它的魔力,这真是令人惊叹。”

现在,谷歌希望在这场竞赛中打个漂亮的“翻身仗”,同时也从开发TensorFlow时所犯的错误中吸取教训,但这将是一个巨大的挑战。毕竟JAX尚且年轻,**作为实验性的框架,远没有达到一个成熟的谷歌产品的标准。**例如,JAX在一些问题上仍然要依赖于其他框架,距离成为理想的“一站式”框架还有很长一段路要走;除了完善了TPU的优化外,对GPU和CPU的支持还没跟上。同时,JAX和前两个框架差别也很大,因此迁移到JAX对于大多数人来说可能还需要考虑迁移成本的问题。

但很明显,谷歌决定豪赌这一把。那么各位读者,你们怎么看呢?

参考资料:https://www.businessinsider.com/facebook-pytorch-beat-google-tensorflow-jax-meta-ai-2022-6?IR=T

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: 将TensorFlow代码转换为PyTorch代码需要进行以下步骤: 1. 理解TensorFlowPyTorch的差异:TensorFlow是基于数据流图的框架,而PyTorch是基于动态计算图的框架。因此,在转换代码时需要注意这两种框架的不同之处。 2. 将TensorFlow代码中的变量、操作和图形转换为PyTorch中的张量、操作和计算图。 3. 将TensorFlow代码中的损失函数、优化器和训练循环转换为PyTorch中的相应函数和循环。 4. 对于一些特殊的TensorFlow操作,如卷积、池化和循环神经网络,需要使用PyTorch中的相应操作进行替换。 5. 在转换代码时,需要注意TensorFlowPyTorch的API名称和参数的不同之处。 总之,将TensorFlow代码转换为PyTorch代码需要一定的技术和经验,需要仔细研究两种框架的差异,并进行适当的修改和调整。 ### 回答2: TensorFlowPyTorch是两个非常受欢迎的深度学习框架。虽然它们具有许多相似之处,但它们的语法和架构都不同。这就意味着在从TensorFlow转换到PyTorch时需要进行额外的努力。 出于这个原因,很多人都在寻找将TensorFlow代码转化为PyTorch的方法。下面是一些方法: 1.手动转换代码 手动转换是转化代码的最基本方法。它需要对两种框架的不同语法有一定的了解,并花费大量的时间将代码从一个框架转换到另一个框架。虽然这种方法的好处是完全自定义化,但由于其奇异性,这种方法往往会花费很长时间。 2.使用现有的库 为了更快地将TensorFlow代码转换为PyTorch,可以使用各种转换库。这些库将自动将TensorFlow代码转换为PyTorch代码。此方法的好处是速度更快,但由于自动化过程的奇异性,可能需要手动调整转换后的代码。 3.使用转换平台 转换平台是一种支持从一种框架转化为另一种框架的自动化工具。这是一种优秀的方式,因为它可以从代码级别转换到网络级别。这些平台通常具有可视化界面,使您可以看到TensorFlow代码和PyTorch代码之间的差异。 总之,TensorFlowPyTorch都是非常强大的深度学习框架。转化代码时需要花费大量的时间,因此您需要选择最适合您需求的方法。手动转换方法是最常用的方法,但使用库和转换平台将会使过程更加高效。 ### 回答3: TensorFlowPyTorch是两个最流行的深度学习框架,它们都为用户带来了高效的张量计算库和易于使用的深度学习模型构建平台。对于那些想要自己从TensorFlow转向PyTorch的人来说,他们需要知道如何在两种框架之间转换代码。因此,下面将介绍如何将TensorFlow代码转换为PyTorch。 首先,需要了解两个框架之间的差异,以便更好地了解代码的转换方式。TensorFlow的图形模型和动态计算图模型是PyTorch的静态计算图模型的很好的对应物。在TensorFlow中,用户构建的模型是一系列计算图中的节点,表示为tf.Operation对象,而张量表示为tf.Tensor对象。在PyTorch中,静态计算图被表示为一系列计算操作/步骤,即nn.Module对象。张量则类似于TensorFlow中的tf.Tensor对象。 接下来是一些常见的TensorFlow代码转换到PyTorch代码的指南。 1. 张量操作: 首先需要看一下TensorFlow的张量操作与PyTorch的张量操作之间的差异。TensorFlow允许在执行操作之前定义张量,在张量右侧添加操作符。而在PyTorch中,记录张量和操作之间的依赖关系,操作只能在执行时添加。 例如: TensorFlow: ``` import tensorflow as tf import numpy as np x = tf.constant(np.array([[1, 2], [3, 4]])) y = tf.constant(5) z = x * y print(z) ``` PyTorch: ``` import torch import numpy as np x = torch.tensor(np.array([[1, 2], [3, 4]])) y = torch.tensor(5) z = x * y print(z) ``` 2. 模型定义: 在TensorFlow中,用户需要明确地定义计算图。在PyTorch中,可以使用nn.Module来定义模型,再将模型的输入传递给模型中的forward方法,以便进行计算。 例如,下面是一个使用TensorFlow定义的简单的线性模型: TensorFlow: ``` import tensorflow as tf import numpy as np class LinearModel(object): def __init__(self): self.W = tf.Variable(np.zeros([2, 1]), dtype=tf.float32) self.b = tf.Variable(np.zeros([1, 1]), dtype=tf.float32) def __call__(self, x): return tf.matmul(x, self.W) + self.b ``` PyTorch: ``` import torch.nn as nn import torch class LinearModel(nn.Module): def __init__(self): super(LinearModel, self).__init__() self.W = nn.Parameter(torch.zeros(2, 1)) self.b = nn.Parameter(torch.zeros(1, 1)) def forward(self, x): return x @ self.W + self.b ``` 3. 损失函数: 在两种框架中,优化模型的常见方法是使用损失函数。然而,不同的框架有不同的损失函数。带权重的分类交叉熵损失函数在TensorFlow中表示为tf.nn.weighted_cross_entropy_with_logits,而在PyTorch中表示为nn.BCEWithLogitsLoss。 例如: TensorFlow: ``` import tensorflow as tf import numpy as np x = tf.Variable(np.array([[1, 2], [3, 4]]), dtype=tf.float32) y_true = tf.Variable(np.array([[0], [1]]), dtype=tf.float32) weights = tf.Variable(np.array([[2], [3]]), dtype=tf.float32) loss = tf.nn.weighted_cross_entropy_with_logits( logits=x, targets=y_true, pos_weight=weights) ``` PyTorch: ``` import torch import numpy as np import torch.nn as nn x = nn.Parameter(torch.tensor([[1, 2], [3, 4]], dtype=torch.float)) y_true = nn.Parameter(torch.tensor([[0], [1]], dtype=torch.float)) weights = nn.Parameter(torch.tensor([[2], [3]], dtype=torch.float)) loss = nn.BCEWithLogitsLoss(weight=weights)(x, y_true) ``` 总结: 在TensorFlowPyTorch之间转换代码不是太困难,因为两种框架之间有许多重叠的部分。重要的是要熟悉两个框架的差异,以便更好地转换代码。尽管这两个框架都可以满足许多需求,但在某些情况下,一个框架可能比另一个框架更适合某些人。因此,将TensorFlow代码转换成PyTorch可能会使某些开发人员更容易使用PyTorch深度学习框架。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值