TensorFlow与PyTorch到底该如何选择?

原文链接:TensorFlow与PyTorch到底该如何选择?

后台很多同学问我深度学习框架到底该学TensorFlow还是PyTorch呢?我将在以下几个方面给出个人建议。

一、易学性与操作性

深度学习框架使用计算图来定义神经网络中执行的计算顺序。TF1使用的静态图机制,PyTorch使用动态图机制。

  • 静态图意味着计算图的构建和实际计算是分开完成(define and run)
  • 动态图意味着计算图的构建和实际计算是同时发生(define by run)

有的同学可能对概念不太理解,我们通过一个例子来对比动态图和静态图机制在编程实现上的差异,分别基于TF1PyTorch实现。

我们定义两个计数器aba初始为0,b初始为10。当a小于b时,就给a自身加2,b自身加1,直到a大于等于b时程序结束。

TF1

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)

在静态图中,需要事先定义整个运算流程与框架,再创建会话后才能进行运算。

PyTorch

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编程实现上不需要额外的学习成本。

Debug

在学习或工作中,调试代码肯定不可避免,我认为TF1最大的劣势就是它难以Debug。在建立Graph的时候不报错,但一喂数据各种崩溃的痛相信不少小伙伴体会过。

而且TF1作为静态图框架,打印中间结果必须要借助会话Session运行才能生效,或者需要学习额外的tfdbg工具。而如果用PyTorch这样的动态图框架的话,就不需要多学一个额外的工具,只需要用正常的Python调试工具就可以了。

二、未来前景

学习一项技术,首先肯定是为了满足当下需求,其次最好可以成为未来主流。

使用人群

下图来自于PapersWithCode网站,颜色面积代表使用该框架的论文公开代码库的数量。

在最新的一个月(2021年9月)新公开的论文代码中,两者的使用量已经相差了5倍,这就可以推测出PyTorch在科研领域的占有率远远高于TF,在学术圈有着几乎统治的地位。

写到这里,我们不难想到,未来这些科研人员与学生中有很大一部分人都要步入职场。

为什么没谈TF2

TF的一贯优势就是落地部署框架选择较多并且成熟,加上我国大部分程序员都是代码的搬运工与修理工,喜欢在前人的代码基础上进行改造再生产,而不是自撸一套代码系统,所以它长期占据着工业市场。

TF2的诞生让之前习惯了静态图的用户感到有些不适。TF2是动态图框架,与TF1的使用方法不同。如果之前使用TF1的用户想过渡到TF2就得重新学习,那么重新学习动态图框架,为什么不学习在动态图领域更加成熟稳定的PyTorch呢?而且近年来Pytorch在落地部署上也成熟了很多,绝对可以满足大部分应用需求。

综上所述,不论您现在是学生还是新型农民工,如果目前想要学习深度学习框架,我会推荐PyTorch进行学习。

更多与AI深度学习相关的干货尽在公众号:AI有温度
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Antai_ZHU/article/details/121117384