PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别

一年一度的PyCon大会上周在俄亥俄Cleveland举行,youtube上早早放出了talk列表。虽然PyCon聚焦Python语言本身,但是关于数据科学AI的talk也不在少数。

David 9感兴趣talk之一就是来自PyLadiesStephanie Kim关于PyTorch介绍

太多小伙伴问David 9 哪个深度学习框架好?用TensorFlow还是PyTorch好 ?

现在是时候结合这个talk给大家讲清楚了。

首先,框架各有自己的优势,关键是你项目需要和个人喜好:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

如果你的项目和RNN强相关,并且希望写RNN模型的时候更轻松敏捷,或者,你是从事科学研究的人员,那么PyTorch更适合你; 如果你项目定位是一个稳定产品(TensorFlow Serving),或者你注重高效训练,并且想把模型移植到轻量级移动端(TensorFlow Lite), 那么选择Tensorflow更合适。

如果以上没有一个是“刚需”,那么如果你的性格和Facebook的“Move fast and break things”很像,你喜欢随意搞坏东西, 随意地调试代码,那么你最好选PyTorch,因为PyTorch就是Facebook打造的。

并且,在深度学习界,Tensorflow就像C语言,PyTorch就像Python,如果你和David 9一样喜欢随心所欲的体验,PyTorch更适合你。

在文档帮助上,PyTorch和TensorFlow一样有丰富的社区支持。和TensorFlow一样,PyTorch的计算单位也是一个Tensor(张量),其内部也有一个计算图(graph),只是它的变量有自动求梯度的功能():

来自:https://www.slideshare.net/lymanblueLin/update-pytorch-tutorial-for-ntu-machine-learing-course-2017

最值得注意的是,Tensorflow的计算图Graph是静态的,而PyTorch的Graph是动态的

来自: https://pytorch.org/about/

如上图,你每写一行代码,都会在PyTorch的Graph上加一个实实在在的变量,并且可以马上进行计算:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

上面定义的两个PyTorch的Tensor瞬间就可以计算出结果 z = [5,7,9].

而在TF中可不是这样的,我们以前讲过Tensorflow是要数据流过Graph时在有实际计算的,如你只是定义Graph,TF是不会进行计算的:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

TF中构建的流图只是一个内部占位的Tensor,需要后期编译Graph后,用TF session进行计算(当然静态图也是有优势的,它可以专门优化一些代码和设备):

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

PyTorch中Debug也非常直接,可以在任意位置插入pdb断点

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

对于GPU的支持,PyTorch也很随意,可以在任意变量指定是否用GPU计算:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

PyTorch的Dynamic Graph(动态图)还有一个优势是可以Dynamic Batching(动态大小地输入Batch)。也许在视觉领域我们每次Input的一个batch都是一个size的,而在RNN和NLP自然语言领域完全不是那么回事,我们经常每次输入一个句子(sentence)的单词长度是不同的,下面就是一个单词树的例子:

来自:https://medium.com/@ilblackdragon/pytorch-dynamic-batching-f4df3dbe09ef

单词树的大小每次都是不一样的(也就是每次batch size是不一样的),但是PyTorch内部的动态图允许我们跑模型的时候,每次的输入层都不一样。这个idea本身似乎是来自Tensorflow Fold这个项目。而在PyTorch中动态Dynamic Batching显得更成功

 

参考文献:

  1. https://www.reddit.com/r/Python/comments/8j4ep6/pycon_2018_talk_videos/
  2. https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s
  3. PyTorch — Dynamic Batching
  4. https://www.slideshare.net/lymanblueLin/update-pytorch-tutorial-for-ntu-machine-learing-course-2017
  5. https://discuss.pytorch.org/t/about-the-variable-length-input-in-rnn-scenario/345

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

《PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注