PyCon 2018数据科学talk盘点,入坑PyTorch前你须要知道的事

原做者David 9git

原文发于做者我的博客,点击查看原文,掘金已得到转载受权。再次感谢做者。github


一年一度的PyCon大会上周在俄亥俄微信

Cleveland

举行,youtube上早早放出了talk列表。虽然PyCon聚焦Python语言自己,可是关于数据科学AI的talk也不在少数。session

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

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

如今是时候结合这个talk给你们讲清楚了。学习

首先,框架各有本身的优点,关键是你项目须要和我的喜爱:优化

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

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

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

而且,在深度学习界,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. www.reddit.com/r/Python/co…
  2. www.youtube.com/watch?v=LEk…
  3. PyTorch — Dynamic Batching
  4. www.slideshare.net/lymanblueLi…
  5. discuss.pytorch.org/t/about-the…

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

或直接扫二维码:

相关文章
相关标签/搜索