(給資料分析與開發加星標,提升資料技能)
英文:Pulkit Sharma,轉自:資料派(ID:datapi),翻譯:陳之炎
概述
從出道起,我就一直是一名程式員。我喜歡從頭開始編寫程式碼,這有助於我清楚地理解主題(或技巧)。當我們剛開始學習資料科學時,這種方法尤為有用。
嘗試從無到有地實現一個神經網路,你將會明白很多有趣的事情。但是當需要為現實世界的資料集構建深度學習模型時,這還是一個不錯的主意嗎?如果你需要幾天或幾周的時間來建立起模型,這是完全不可能的。
對於那些無法訪問無限計算資源的人來說,你們已經來到了正確的地方。
值得慶幸的是,我們現在已經有了易於使用的開源深度學習框架,旨在簡化複雜和大規模深度學習模型的實現。使用這些神奇的框架,我們可以實現諸如摺積神經網路這樣複雜的模型。
在本文中,將介紹5種非常有用的深度學習框架、它們的優點以及應用。我們將對每個框架進行比較,以瞭解何時何地可以使用它們。
我們還建立了一個非常酷的針對每個深度學習框架的資訊圖表,附在在文章的末尾,為每個資料科學家所必備。
目錄
一、什麼是深度學習框架?
二、TensorFlow
三、Keras
四、PyTorch
五、Caffe
六、Deeplearning4j
七、五個深度學習框架之間的對比
一、什麼是深度學習框架?
讓我們用一個例子來理解這個概念,來看以下影象集合:
在這個影象中有不同的分類:貓,駱駝,鹿,大象等。我們的任務是將這些影象歸到相應的類(或類別)中。用Google搜尋一下就能知道:摺積神經網路(CNNs)對於這類影象分類任務十分有效。
我們要做的工作就是實現這個模型,對嗎?如果從頭開始編寫一個摺積神經網路,則需要幾天(甚至幾周)才能得到一個有效的模型,我們卻沒法等這麼長的時間!
這正是深度學習框架真正改變了局面的地方。
深度學習框架是一種介面、庫或工具,它使我們在無需深入瞭解底層演演算法的細節的情況下,能夠更容易、更快速地構建深度學習模型。深度學習框架利用預先構建和最佳化好的元件集合定義模型,為模型的實現提供了一種清晰而簡潔的方法。
利用恰當的框架來快速構建模型,而無需編寫數百行程式碼,一個良好的深度學習框架具備以下關鍵特徵:
- 最佳化的效能
- 易於理解和編碼
- 良好的社群支援
- 並行化的行程,以減少計算
- 自動計算梯度
這五點也是我用來挑選五大頂級深度學習框架的標準。下麵讓我們詳細研究一下它們。
二、TensorFlow
TensorFlow是由谷歌大腦團隊的研究人員和工程師開發的,它是深度學習領域中最常用的軟體庫(儘管其他軟體正在迅速崛起)。
我喜歡TensorFlow的原因有兩點:它完全是開源的,並且有出色的社群支援。TensorFlow為大多數複雜的深度學習模型預先編寫好了程式碼,比如遞迴神經網路和摺積神經網路。
TensorFlow如此流行的最大原因之一是支援多種語言來建立深度學習模型,比如Python、C和R,並且有不錯的檔案和指南。
TensorFlow有許多元件,其中最為突出的是:
- Tensorboard:幫助使用資料流圖進行有效的資料視覺化
- TensorFlow:用於快速部署新演演算法/試驗
TensorFlow的靈活架構使我們能夠在一個或多個CPU(以及GPU)上部署深度學習模型。下麵是一些典型的TensorFlow用例:
- 基於文字的應用:語言檢測、文字摘要
- 影象識別:影象字幕、人臉識別、標的檢測
- 聲音識別
- 時間序列分析
- 影片分析
用例遠遠不止這些,如果你知道TensorFlow還有以上所述之外的其他應用,我很樂意知道!可以在本文的評論部分告訴我,我們再做討論。
安裝TensorFlow也是一個非常簡單的任務。
對於CPU:
pip install tensorflow
對於啟用CUDA的GPU卡:
pip install tensorflow-gpu
透過以下綜合教程瞭解如何使用TensorFlow建立神經網路模型:
- 利用TensorFlow實現神經網路簡介
https://www.analyticsvidhya.com/blog/2016/10/an-introduction-to-implementing-neural-networks-using-tensorflow/?utm_source=blog&utm;_medium=comparison-deep-learning-framework
- TensorFlow教程
https://www.tensorflow.org/tutorials
三、Keras
你習慣使用Python嗎?如果是,那麼可以立即連線到Keras。這是一個開啟你的深度學習之旅的完美的框架。
Keras用Python編寫,可以在TensorFlow(以及CNTK和Theano)之上執行。TensorFlow的介面具備挑戰性,因為它是一個低階庫,新使用者可能會很難理解某些實現。
而Keras是一個高層的API,它為快速實驗而開發。因此,如果希望獲得快速結果,Keras會自動處理核心任務並生成輸出。Keras支援摺積神經網路和遞迴神經網路,可以在CPU和GPU上無縫執行。
深度學習的初學者經常會抱怨:無法正確理解複雜的模型。如果你是這樣的使用者,Keras便是你的正確選擇!它的標的是最小化使用者操作,並使其模型真正容易理解。
可以將Keras中的模型大致分為兩類:
1. 序列化
模型的層是按順序定義的。這意味著當我們訓練深度學習模型時,這些層次是按順序實現的。下麵是一個順序模型的示例:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
# we can add multiple layers to the model using .add()
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
2. Keras 函式API
用於定義複雜模型,例如多輸出模型或具有共享層的模型。請檢視下麵的程式碼來理解這一點:
from keras.layers import Input, Dense
from keras.models import Model
inputs = Input(shape=(100,)) # specify the input shape
x = Dense(64, activation='relu')(inputs)
predictions = Dense(10, activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)
Keras有多種架構,如下所述,用於解決各種各樣的問題,其中包括我的最愛之一:影象分類!
- VGG 16
- VGG 19
- InceptionV 3
- Mobilenet及更多
可以參考官方的Keras檔案來詳細瞭解框架是如何工作的。
Keras官方中文檔案 https://keras.io/zh/
僅需一行程式碼即可安裝Keras:
pip install keras
對Keras感興趣?可以繼續學習以下教程,瞭解如何使用Keras實現神經網路:
- 基於Keras的神經網路最佳化
https://www.analyticsvidhya.com/blog/2016/10/tutorial-optimizing-neural-networks-using-keras-with-image-recognition-case-study/?utm_source=blog&utm;_medium=comparison-deep-learning-framework
四、PyTorch
還記得我們說過TensorFlow是目前最常用的深度學習框架嗎?但是如果考慮到資料科學家和開發者們擁抱Facebook的PyTorch的速度,那它可能很快就要落伍了。
我是PyTorch的擁護者,在我所研究過的框架中,PyTorch最富靈活性。
PyTorch是Torch深度學習框架的一個介面,可用於建立深度神經網路和執行張量計算。Torch是一個基於Lua的框架,而PyTorch則執行在Python上。
PyTorch是一個Python包,它提供張量計算。張量是多維陣列,就像numpy的ndarray一樣,它也可以在GPU上執行。PyTorch使用動態計算圖,PyTorch的Autograd軟體包從張量生成計算圖,並自動計算梯度。
與特定功能的預定義的圖表不同,PyTorch提供了一個框架,用於在執行時構建計算圖形,甚至在執行時也可以對這些圖形進行更改。當不知道建立神經網路需要多少記憶體的情況下,這個功能便很有價值。
可以使用PyTorch處理各種來自深度學習的挑戰,包括:
- 影像(檢測、分類等)
- 文字(NLP)
- 增強學習
想知道如何在機器上安裝PyTorch,請稍等片刻。安裝步驟取決於作業系統、需要安裝的PyTorch包、正在使用的工具/語言、CUDA等其他一些因素。
根據此連結的內容檢查PyTorch安裝步驟,準備好框架之後,再檢查以下兩個資源,利用PyTorch構建第一個神經網路:
- 學習如何使用PyTorch來構建快速和準確的神經網路-4個不錯的案例研究
https://www.analyticsvidhya.com/blog/2019/01/guide-pytorch-neural-networks-case-studies/https://www.analyticsvidhya.com/blog/2019/01/guide-pytorch-neural-networks-case-studies/?utm_source=blog&utm_medium=comparison-deep-learning-framework
- PyTorch教程
https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
五、Caffe
CAFE是另一個面向影象處理領域的、比較流行的深度學習框架,它是由賈陽青(Yangqing Jia)在加利福尼亞伯克利大學讀博士期間開發的。同樣,它也是開源的!
首先,Caffe對遞迴網路和語言建模的支援不如上述三個框架。但是Caffe最突出的地方是它的處理速度和從影象中學習的速度。
Caffe可以每天處理超過六千萬張影象,只需單個NVIDIA K40 GPU,其中 1毫秒/影象用於推理,4毫秒/影象用於學習。
它為C、Python、MATLAB等介面以及傳統的命令列提供了堅實的支援。
透過Caffe Model Zoo框架可訪問用於解決深度學習問題的預訓練網路、模型和權重。這些模型可完成下述任務:
- 簡單的遞迴
- 大規模視覺分類
- 用於影象相似性的SiameSE網路
- 語音和機器人應用
有關更多細節,您可以檢視Caffe相關檔案。
- Caffe安裝檔案
http://caffe.berkeleyvision.org/installation.html
- Caffe檔案
http://caffe.berkeleyvision.org/
六、Deeplearning4j
我們社群中有Java程式員嗎?這是你理想的深度學習框架!Deeplearning4j是用Java實現的,因此與Python相比效率更高。它使用稱為ND4J的張量庫,提供了處理n維陣列(也稱為張量)的能力。該框架還支援CPU和GPU。
Deeplearning4j將載入資料和訓練演演算法的任務作為單獨的過程處理,這種功能分離提供了很大的靈活性。誰都喜歡這樣,尤其是在深度學習中!
Deeplearning4j也適用於不同的資料型別:
- 影象
- CSV
- 純文字等
可以使用Deeplearning4j構建的深度學習模型有:
- 摺積神經網路(CNNs)
- 遞迴神經網路(RNNs)
- 長短時記憶(LSTM)等多種結構
閱讀Deeplearning4j的安裝步驟和檔案,開始使用這個框架。
- Deeplearning4j安裝步驟
https://deeplearning4j.org/docs/latest/deeplearning4j-config-gpu-cpu
- Deeplearning4j檔案
https://deeplearning4j.org/docs/latest/deeplearning4j-quickstart
七、五種深度學習框架之間的對比
上面已經討論了五個最流行的深度學習框架,每一個都獨具特性,那麼資料科學家會如何做出選擇呢。
你決定用哪一種了嗎?或者你打算換一個全新的框架?不管是什麼情況,瞭解每個框架的優點和侷限性非常重要。如果選對了正確的框架,當遇到錯誤時,便不會感到驚訝了!
某些框架在處理影象資料時工作得非常好,但無法解析文字資料;某些框架在處理影象和文字資料時,效能很好,但是它們的內部工作原理很難理解。
在本節中,將使用以下標準比較這五個深度學習框架:
- 社群支援力度
- 使用的語言
- 介面
- 對預訓練的模型的支援
下表對這些框架進行了比較:
對於選擇使用的框架來說,這是一個非常方便的對比表!
所有這些框架都是開源的,支援CUDA,並有預訓練的模型。但是,應該如何正確開始,應該選擇哪個框架來構建(初始)深度學習模型?讓我們來做詳細的討論!
-
TensorFlow
我們先來說說TensortFlow。TensorFlow能處理影象以及基於序列的資料,如果你是深度學習的初學者,或者對線性代數和微積分等數學概念沒有堅實的基礎,那麼TensortFlow的學習曲線將會令人畏懼地陡峭。
我完全理解,對於剛起步的人來說,這可能太複雜。但我建議你不斷練習,不斷探索社群,並繼續閱讀文章以掌握TensorFlow的訣竅。一旦對這個框架有了一個很好的理解,實現一個深度學習模型對你來說將是易如反掌。
-
Keras
Keras是一個非常堅實的框架,可以開啟深度學習之旅。如果你熟悉Python,並且沒有進行一些高階研究或開發某種特殊的神經網路,那麼Keras適合你。
Keras的重點更多地放在取得成果上,而不是被模型的複雜之處所困擾。因此,如果有一個與影象分類或序列模型相關的專案,可以從Keras開始,很快便可以構建出一個工作模型。
Keras也整合在TensorFlow中,因此也可以使用tf.keras.構建模型。
-
Caffe
在影象資料上構建深度學習模型時,Caffe是不錯的選擇。但是,當談到遞迴神經網路和語言模型時,Caffe落後於我們討論過的其他框架。Caffe的主要優點是,即使沒有強大的機器學習或微積分知識,也可以構建出深度學習模型。
Caffe主要用於建立和部署行動電話和其他計算受限平臺的深度學習模型。
-
Deeplearning4j
正如之前所述,DeepleEarning4J是Java程式員的天堂。它為CNNS、RNN和LSTMS等不同的神經網路提供了大量的支援,它在不犧牲速度的情況下可以處理大量資料。聽起來不錯,有機會透過!
後記及圖示資訊圖
除了文中提及的五種深度學習框架之外,你有沒有其他的深度學習框架?很想聽聽你的想法和反饋。請在下麵的評論部分與我聯絡。
記住,這些框架基本上只是幫助我們實現最終標的的工具,正確地選擇它們可以減少大量的精力和時間。
最後附上資訊插圖,詳細介紹了我們所涵蓋的每個深度學習框架。下載它,列印它,併在下次構建深度學習模型時使用它吧!
朋友會在“發現-看一看”看到你“在看”的內容