原做者: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
或直接掃二維碼: