全文共3412字,預計學習時長7分鐘
在對TensorFlow、PyTorch和Keras做功能對比之前,先來了解一些它們各自的非競争性柔性特點吧。
非競争性特點
下文介紹了TensorFlow、PyTorch和Keras的幾個不同之處,便于讀者對這三個架構有初步了解。列出這些差別的重點不在于對三者做比較,而在于做一個初步介紹。
TensorFlow
· 開發者:Google
· 2017年1月釋出1.0版本
PyTorch
· 開發者:Facebook
· 2018年10月釋出1.0版本
· 基于Torch開發(Torch是基于Lua開發的另一個深度學習架構)
Keras
· 是一個進階API,降低了深度學習架構的複雜程度
· 可以在其他深度學習API,如TensorFlow、Theano和CNTK上運作
· 本身并不是一個庫
競争性差別
下面将介紹這三個架構更加具有競争性的差別。本文着重分析比較了這三個架構用于自然語言處理(Natural Language Processing,NLP)時的不同之處。
1. 可用的RNN類型
當試圖用深度學習方法來解決NLP問題時,循環神經網絡(Recurrent Neural Networks,RNNs)是開發者最常用的專業架構。是以,本文也選擇從這一角度切入來比較TensorFlow、PyTorch和Keras架構。
本文比較的三種架構都具有可用于建構簡單RNN以及更複雜的RNN——門控循環單元(Gated Recurrent Units,GRU)和長短時記憶網絡(Long Short Term Memory networks,LSTM)的子產品。
PyTorch:
PyTorch提供2種不同層次的類别(class)用于建構循環網絡:
· 多層次類别(Multi-layer classes),包括nn.RNN、nn.GRU和nn.LSTM。這些類别的基類(Object)可用于表示深度雙向循環神經網絡。
· 單元層類别(Cell-level classes),包括nn.RNNCell、nn.GRUCell和nn.LSTMCell。這些類别的基類僅可用于表示單個單元(如簡單RNN、LSTM及GRU的單元),即處理輸入資料一個時間步長的單元。
是以,當神經網絡中不需要太多定制時,多層次類别對單元層類别來說,就像是不錯的包裝類(wrapper)。
此外,建構一個雙向RNN非常簡單,隻需在多層次類别中将雙向實參設定為True就可以了。
TensorFlow:
TensorFlow提供tf.nn.rnn_cell子產品用于建構标準RNN。
tf.nn.rnn_cell子產品中最重要的類别包括:
· 單元層類别(Cell level classes):用于定義RNN的單個單元,即BasicRNNCell、GRUCell和LSTMCell。
· 多RNN單元類别(MultiRNNCell class):用于堆棧多個單元,以建立深度RNN。
· 随機失活包裝類别(DropoutWrapper class):用于執行dropout正則化。
Keras:
Keras庫提供的循環層包括:
· 簡單RNN——全連接配接RNN,其輸出被回報到輸入中
· GRU——門控循環單元層
· LSTM——長短時記憶層
TensorFlow、PyTorch和Keras都具有建構常見RNN架構的内置功能。它們的差別在于接口不同。
Keras的接口非常簡單,包含一小串定義明确的參數,能夠使上述類别的執行更加簡單。作為一個能夠在TensorFlow上運作的進階API,Keras使得TensorFlow更加簡單。TensorFlow和PyTorch兩者的靈活性差不多,但是後者的接口更加簡潔明了。
2. TensorFlow、PyTorch、Keras易用性對比
TensorFlow常因其範圍狹小的API而被诟病。相比之下,PyTorch對使用者則更為友好,使用也更加簡單。總之,PyTorch與Python語言的融合更為緊密,也更加自然。而在TensorFlow架構中編寫程式時,程式員常感到自己與模型之間仿佛隔着一堵磚牆,隻留下了幾個洞孔用于交流。
下文将讨論并比較更多影響這三個架構易用性的因素:
· 靜态計算圖vs動态計算圖:
計算圖是NLP中非常重要的一個因素。TensorFlow使用靜态計算圖,PyTorch則使用動态計算圖。
這也就意味着在TensorFlow中,需要先靜态定義計算圖,再運作模型。所有與外界的溝通都通過tf.Session對象和tf.Placeholder進行,而這兩個張量在運作時庫中都會被外部資料替代。
PyTorch中的計算圖則更為重要和靈活。使用者可以根據需要定義、改變和執行節點,無需依賴特殊的會話接口或占位符。
RNN靜态圖的輸入序列長度通常是固定的。也就是說,開發一個英文句子情感分析模型必須将句子長度固定到某個最大值,并用0填充所有過短的序列。這真的很不友善。
· 調試:
由于PyTorch在運作時庫中定義計算圖,是以使用者可以使用自己喜愛的調試工具,如pdb、ipdb、PyCharm debugger、old trusty print statements等。
但上述情況并不适用于TensorFlow。在TensorFlow中,使用者可以選擇使用一個名為tfdbg的特殊工具,用于評估運作時庫的TensorFlow表達式和浏覽會話作用域中的所有張量和操作。但是,這一工具顯然不能調試python代碼。是以使用者還必須再使用pdb進行調試。
· 社群規模:
和PyTorch相比,TensorFlow更加成熟,其社群規模比PyTorch和Keras的社群規模加起來還要大得多,使用者基數的增長也比PyTorch和Keras要快。
這也就意味着:
· 有更大規模的社群,如StackOverFlow上的社群,幫助你解決問題
· 有更多的線上學習資料,如部落格、視訊、課程等
· 能更快掌握最新的深度學習技術
NLP的未來
循環神經網絡作為用作NLP任務的專業架構已經有相當長的一段時間了,但這一情況并不會長期不變。一個最新開發的基于注意力機制的變換模型(transformer model)已經在研究者之間流行開來。
這一模型已經代替RNN成為了新的NLP标準。一些評論家認為,Transformer将會成為2019年主流NLP深度學習架構。
在這場比賽中,TensorFlow似乎領先于另外兩個架構:
· 首先,注意力架構是Google自己研發的。
· 其次,隻有TensorFlow有Transformer穩定版架構。
但這并不是說PyTorch已經遠遠地落在了後面。Huggingface的GitHub已經釋出了很多預訓練的PyTorch transformer模型:https://github.com/huggingface/pytorch-transformers。
另外,Google最近釋出的TensorFlow 2.0很可能将帶來翻天覆地的變化!
具體來說:
· Keras将會成為TensorFlow的進階API,其功能将會被擴充,使得使用者能夠在tf.keras上直接使用TensorFlow的最新功能。任一範圍的TensorFlow及其硬體裝置都将具備Keras的簡便性。
· TensorFlow 2.0預設為動态圖機制(eager execution)。使用者甚至在eager context中也可以使用計算圖,這将使調試和原型設計更為簡單。TensorFlow運作時庫則會在背景調控性能和規模。
· TensorBoard會和Keras整合——這在目前無法實作。
是以,本文猜想,TensorFlow 2.0将會消除幾乎所有TensorFlow的不足。TensorFlow作為所有深度學習任務專業架構的地位将會得到鞏固,甚至變得更好!
推薦閱讀專題
留言 點贊 發個朋友圈
我們一起分享AI學習與發展的幹貨
編譯組:王努銥、楊月
相關連結:
https://dzone.com/articles/tensorflow-vs-pytorch-vs-keras-for-nlp
如需轉載,請背景留言,遵守轉載規範
推薦文章閱讀
EMNLP2017論文集28篇論文解讀
2018年AI三大頂會中國學術成果全連結
ACL2017 論文集:34篇解讀幹貨全在這裡
版權聲明:本文為CSDN部落客「duxinshuxiaobian」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/duxinshuxiaobian/article/details/101730787