用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
决定一个框架的使用率有哪些因素呢?我总结有以下四个方面:
第一是易用性。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