2022年TensorFlow没落


看到 TensorFlow 的下滑程度令人震惊。
最近发布的 2022 年机器学习竞争状况报告描绘了一幅非常严峻的画面——只有 4% 的获胜项目是使用 TensorFlow 构建的。这与几年前形成鲜明对比,当时 TensorFlow 拥有深度学习几乎整个领域。

总体而言,糟糕的架构决策导致社区放弃。

TensorFlow 团队试图通过 TensorFlow v2 重构来修复所有这些问题,但为时已晚,而且它放弃了 TensorFlow 仍在坚持的核心部分——遗留系统。

在 TensorFlow 名称之下是非常复杂的,这给本已困难的机器学习增加了学习曲线。尝试创建一个简单的神经网络和训练循环需要数天的调试和研究才能进行进一步的实验。这些复杂性的诊断?缺乏文档、用户指南,以及最重要的 pythonic 设计。

TensorFlow 背后的架构师决定采用图形执行方法,从而产生复杂的编码风格。当工程师和研究人员编写新的解决方案时,该代码创建了一个不可见的全局图,只能通过稍后的会话对象进行交互。只有借助 TensorBoard 图形可视化器等辅助软件才能理解或调试代码,引入了进一步的学习曲线。

面是 PyTorch 和 TensorFlow 代码示例,说明了它们明显的结构和可读性差异:

最小的 TensorFlow 示例:

import tensorflow as tf 

# 定义模型
inp = tf.placeholder(tf.float32, [ None , 784 ]) 
W = tf.Variable(tf.zeros([ 784 , 10 ])) 
b = tf.Variable(tf.zeros ([ 10 ])) 
out = tf.nn.softmax(tf.matmul(x, W) + b) 

# 初始化变量并创建会话
init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run (init) 

# 调用模型
test_input = None
 out_res = sess.run(out, feed_dict={inp: test_inp})


最小 PyTorch 示例

import torch
import torch.nn as nn
import torch.nn.functional as F

# Define and Initialize the model
class ExampleNetwork(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 10)
    def forward(self, x):
        return F.softmax(self.fc1(x), dim=1)
model = Net()

# Run an inference
test_input = None
out = ExampleNetwork(test_inp)


Jax 是 Google 的最新产品,TensorFlow 已从行业遗留系统中消失。尽管如此,Jax 将在 Google 之外得到什么样的采用还有待观察。它在架构上比 TensorFlow 好得多,但它的文档、入门指南和便利的 API 仍有很多不足之处。Jax 仍处于研究工具阶段,尚未为整个 ML 社区做好准备,但它正在迅速发展。在那之前,PyTorch 将继续统治。