PyCon 2018資料科學talk盤點,入坑PyTorch前你需要知道的事

金正皓發表於2018-05-25

原作者David 9

原文發於作者個人部落格,點選檢視原文,掘金已獲得轉載授權。再次感謝作者。


一年一度的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. 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

或直接掃二維碼:

PyCon 2018資料科學talk盤點,入坑PyTorch前你需要知道的事


相關文章