原文链接:TensorFlow与PyTorch到底该如何选择?
后台很多同学问我深度学习框架到底该学TensorFlow
还是PyTorch
呢?我将在以下几个方面给出个人建议。
深度学习框架使用计算图来定义神经网络中执行的计算顺序。TF1
使用的静态图机制,PyTorch
使用动态图机制。
有的同学可能对概念不太理解,我们通过一个例子来对比动态图和静态图机制在编程实现上的差异,分别基于TF1
和PyTorch
实现。
我们定义两个计数器
a
与b
,a
初始为0,b
初始为10。当a
小于b
时,就给a
自身加2,b
自身加1,直到a
大于等于b
时程序结束。
import tensorflow as tf
# 先构建图
a = tf.constant(0)
b = tf.constant(10)
def cond(first_counter, second_counter, *args):
return first_counter < second_counter
def body(first_counter, second_counter):
first_counter = tf.add(first_counter, 2)
second_counter = tf.add(second_counter, 1)
return first_counter, second_counter
c1, c2 = tf.while_loop(cond, body, [a, b])
# 再创建会话进行计算
with tf.Session() as sess:
a, b = sess.run([c1, c2])
print(a)
print(b)
在静态图中,需要事先定义整个运算流程与框架,再创建会话后才能进行运算。
import torch
a = torch.Tensor([0])
b= torch.Tensor([10])
while (a < b):
a += 2
b += 1
print(a)
print(b)
看到这里,同学们应该就能看出差异,代码除了定义张量Tensor
外,其余部分与Python
一模一样。因为PyTorch
是动态图,所以每次运算会构建新的计算图。
那么如果你会Python
,将意味着你在PyTorch
编程实现上不需要额外的学习成本。
在学习或工作中,调试代码肯定不可避免,我认为TF1
最大的劣势就是它难以Debug
。在建立Graph
的时候不报错,但一喂数据各种崩溃的痛相信不少小伙伴体会过。
而且TF1
作为静态图框架,打印中间结果必须要借助会话Session
运行才能生效,或者需要学习额外的tfdbg
工具。而如果用PyTorch
这样的动态图框架的话,就不需要多学一个额外的工具,只需要用正常的Python
调试工具就可以了。
学习一项技术,首先肯定是为了满足当下需求,其次最好可以成为未来主流。
下图来自于PapersWithCode网站,颜色面积代表使用该框架的论文公开代码库的数量。
在最新的一个月(2021年9月)新公开的论文代码中,两者的使用量已经相差了5倍,这就可以推测出PyTorch
在科研领域的占有率远远高于TF
,在学术圈有着几乎统治的地位。
写到这里,我们不难想到,未来这些科研人员与学生中有很大一部分人都要步入职场。
TF2
TF
的一贯优势就是落地部署框架选择较多并且成熟,加上我国大部分程序员都是代码的搬运工与修理工,喜欢在前人的代码基础上进行改造再生产,而不是自撸一套代码系统,所以它长期占据着工业市场。
TF2
的诞生让之前习惯了静态图的用户感到有些不适。TF2
是动态图框架,与TF1
的使用方法不同。如果之前使用TF1
的用户想过渡到TF2
就得重新学习,那么重新学习动态图框架,为什么不学习在动态图领域更加成熟稳定的PyTorch
呢?而且近年来Pytorch
在落地部署上也成熟了很多,绝对可以满足大部分应用需求。
综上所述,不论您现在是学生还是新型农民工,如果目前想要学习深度学习框架,我会推荐PyTorch
进行学习。