全文共

3412

字,預計學習時長

7

分鐘

TensorFlow、PyTorch、Keras:NLP框架哪家強

在對TensorFlow、PyTorch和Keras做功能對比之前,先來了解一些它們各自的非競爭性柔性特點吧。

TensorFlow、PyTorch、Keras:NLP框架哪家強

非競爭性特點

下文介紹了TensorFlow、PyTorch和Keras的幾個不同之處,便於讀者對這三個框架有初步瞭解。列出這些區別的重點不在於對三者做比較,而在於做一個初步介紹。

TensorFlow

· 開發者:Google

· 2017年1月釋出1。0版本

PyTorch

· 開發者:Facebook

· 2018年10月釋出1。0版本

· 基於Torch開發(Torch是基於Lua開發的另一個深度學習框架)

Keras

· 是一個高階API,降低了深度學習框架的複雜程度

· 可以在其他深度學習API,如TensorFlow、Theano和CNTK上執行

· 本身並不是一個庫

TensorFlow、PyTorch、Keras:NLP框架哪家強

競爭性區別

TensorFlow、PyTorch、Keras:NLP框架哪家強

下面將介紹這三個框架更加具有競爭性的區別。本文著重分析比較了這三個框架用於自然語言處理(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的未來

TensorFlow、PyTorch、Keras: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作為所有深度學習任務專業框架的地位將會得到鞏固,甚至變得更好!

TensorFlow、PyTorch、Keras:NLP框架哪家強

留言 點贊 關注

我們一起分享AI學習與發展的乾貨

編譯組:王努銥、楊月

相關連結:

https://

dzone。com/articles/tens

orflow-vs-pytorch-vs-keras-for-nlp

如需轉載,請後臺留言,遵守轉載規範