TensorFlow与PyTorch对比

六月ゝ 毕业季﹏ 提交于 2021-02-11 03:15:52

用TensorFlow还是PyTorch?从TensorFlow开始学起还是PyTorch?在一年前,这个问题毫无争议,当然是TensorFlow. 但时过境迁,现在的情况大不一样了,下面就来分析对比一下这两个主流框架。

首先看一下最近的统计数据,下图的数据是从arxiv论文中统计得到的。上面的黄线是TensorFlow的使用比例,下面的红线是PyTorch的使用比例,可以看出,最近的数据两者已经不差上下,甚至红线PyTorch在2019.6要略胜一筹。

右边的条形图是从1月到6月的累计数据,TensorFlow占比还是要略高一点,但是23%的增长率明显要低于PyTorch的194%.也就是说,现在TensorFlow和PyTorch在学术界的使用率上来说已经不差上下了

来源:https://www.oreilly.com/ideas/one-simple-graphic-researchers-love-pytorch-and-tensorflow

 

决定一个框架的使用率有哪些因素呢?我总结有以下四个方面:

  1. 易用性

  2. 速度

  3. 算子数量

  4. 开源模型

 

第一是易用性。PyTorch自从2018年12月PyTorch 1.0 stable版本正式发布以来,只有半年多的时间,能迅速增长易用性功不可没。PyTorch的易用性一方面是debug简单,可以直接设置断点查看各个tensor的值,另一方面tensor可以和numpy格式互相转换调用,可以使用python的控制流,大大扩充了其灵活性(TensorFlow推出的eager模式有类似目的和效果)。

第二是速度。训练是一个费时费力的过程,用GPU训练一两天是正常,甚至有的大模型大数据量需要十天半个月(例如BERT large),因此训练速度也是大家比较关心的一个指标。PyTorch虽然提供了非常灵活的接口,采用动态图机制,但是也做了非常多的优化,比如异步调用,尽量流水执行等方式,使得其速度和TensorFlow相当,甚至一些场景优于TensorFlow.

第三是算子数量。这一点TensorFlow无疑是最大的赢家,提供的python API达到8000多个(参见https://tensorflow.google.cn/api_docs/python),基本上不存在用户找不到的算子,所有的算法都可以用TensorFlow算子拼出来。不过API过多也是个负担,又是low level又是high level,容易把用户整晕。PyTorch由于起步较晚,数量少有劣势,但质量上有优势。

第四是开源模型。这点其实也非常重要,试想一下,现在你要用BERT,这个是由Google研究发布,基于TensorFlow开源的,那自然只能选TensorFlow上手了。虽然后续有人开源PyTorch的版本,但毕竟时间上要晚一些,而且非官方的,质量不能得到100%的保证,关注度会大打折扣。不过PyTorch这方面也非常重视,之前把何凯明挖过去,构建了自己的图像检测、分割开源库Detectron,对提升PyTorch的使用率起了很大作用。

 

总得来说,这两种框架是都需要必备的,掌握各自的使用技巧,多看新的模型,才能立于不败之地~

 

附录:

TensorFlow models:

bert

boosted_trees

mnist

resnet

transformer

wide_deep

 

adversarial_crypto

adversarial_text

attention_ocr

audioset

autoencoder

brain_coder

cognitive_mapping_and_planning

compression

cvt_text

deep_contextual_bandits

deep_speech

deeplab

delf

differential_privacy

domain_adaptation

fivo

gan

im2txt

inception

keypointnet

learning_to_remember_rare_events

learning_unsupervised_learning

lexnet_nc

lfads

lm_1b

lm_commonsense

maskgan

namignizer

neural_gpu

neural_programmer

next_frame_prediction

object_detection

pcl_rl

ptn

marco

qa_kg

real_nvp

rebar

resnet

seq2species

skip_thoughts

slim

street

struct2depth

swivel

syntaxnet

tcn

textsum

transformer

vid2depth

video_prediction

 

PyTorch models

AlexNet

VGG

ResNet

SqueezeNet

DenseNet

Inception v3

GoogLeNet

ShuffleNet v2

MobileNet v2

ResNeXt

 

FCN ResNet101

DeepLabV3 ResNet101

 

Faster R-CNN ResNet-50 FPN

Mask R-CNN ResNet-50 FPN

Keypoint R-CNN ResNet-50 FPN

 

 

 

 

参考资料:

统计数据:https://www.oreilly.com/ideas/one-simple-graphic-researchers-love-pytorch-and-tensorflow

Eager发布的blog: https://ai.googleblog.com/2017/10/eager-execution-imperative-define-by.html

Eager说明:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/README.md#changelog

   

联系我:guanxs_ai@126.com


本文分享自微信公众号 - AI人工智能与大数据(ai_data_tech)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!