原做者:David 9git
原文发于做者我的博客,点击查看原文,掘金已得到转载受权。再次感谢做者。github
一年一度的PyCon大会上周在俄亥俄微信
举行,youtube上早早放出了talk列表。虽然PyCon聚焦Python语言自己,可是关于数据科学和AI的talk也不在少数。session
David 9感兴趣talk之一就是来自PyLadies的Stephanie Kim关于PyTorch介绍:框架
太多小伙伴问David 9 哪一个深度学习框架好?用TensorFlow仍是PyTorch好 ?ide
如今是时候结合这个talk给你们讲清楚了。学习
首先,框架各有本身的优点,关键是你项目须要和我的喜爱:优化
若是你的项目和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),只是它的变量有自动求梯度的功能():
最值得注意的是,Tensorflow的计算图Graph是静态的,而PyTorch的Graph是动态的:
如上图,你每写一行代码,都会在PyTorch的Graph上加一个实实在在的变量,而且能够立刻进行计算:
上面定义的两个PyTorch的Tensor瞬间就能够计算出结果 z = [5,7,9].
而在TF中可不是这样的,咱们之前讲过Tensorflow是要数据流过Graph时在有实际计算的,如你只是定义Graph,TF是不会进行计算的:
TF中构建的流图只是一个内部占位的Tensor,须要后期编译Graph后,用TF session进行计算(固然静态图也是有优点的,它能够专门优化一些代码和设备):
PyTorch中Debug也很是直接,能够在任意位置插入pdb断点:
对于GPU的支持,PyTorch也很随意,能够在任意变量指定是否用GPU计算:
PyTorch的Dynamic Graph(动态图)还有一个优点是能够Dynamic Batching(动态大小地输入Batch)。也许在视觉领域咱们每次Input的一个batch都是一个size的,而在RNN和NLP天然语言领域彻底不是那么回事,咱们常常每次输入一个句子(sentence)的单词长度是不一样的,下面就是一个单词树的例子:
单词树的大小每次都是不同的(也就是每次batch size是不同的),可是PyTorch内部的动态图容许咱们跑模型的时候,每次的输入层都不同。这个idea自己彷佛是来自Tensorflow Fold这个项目。而在PyTorch中动态Dynamic Batching显得更成功。
参考文献:
本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著做权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com
或直接扫二维码: