雖然我們大多數人都驚嘆為什么DL這么好? 在使用大量數據進行訓練時,它在準確性方面非常出色。近幾年隨著深度學習算法的發展,出現了很多深度學習的框架,這些框架各有所長,各具特色。下面將為大家介紹2019年最受歡迎的十大深度學習框架。
TensorFlow
谷歌的Tensorflow可以說是當今最受歡迎的深度學習框架。 Gmail,Uber,Airbnb,Nvidia以及其他許多知名品牌都在使用。TF是目前深度學習的主流框架,Tensorflow主要特性:
- TensorFlow支持Python、JAVAScript、C ++、Java和Go,C#和Julia等多種編程語言。
- TF不僅擁有強大的計算集群,還可以在IOS和Android等移動平臺上運行模型。
- TF編程入門難度較大。初學者需要仔細考慮神經網絡的架構,正確評估輸入和輸出數據的維度和數量。
- TF使用靜態計算圖進行操作 。 也就是說我們需要先定義圖形,然后運行計算,如果我們需要對架構進行更改,我們會重新訓練模型。 選擇這樣的方法是為了提高效率,但是許多現代神經網絡工具能夠在學習過程中考慮改進而不會顯著降低學習速度。 在這方面,TensorFlow的主要競爭對手是PyTorch 。
TensorFlow優點:
- 它非常適合創建和試驗深度學習架構,便于數據集成,如輸入圖形,SQL表和圖像。
- 它得到谷歌的支持,這就說明該模型短期內不會被拋棄,因此值得投入時間來學習它。
PyTorch
Tensorflow之后用于深度學習的主要框架是PyTorch。 PyTorch框架是Facebook開發的,已被Twitter和Salesforce等公司使用。PyTorch基本特性:
- 與TensorFlow不同,PyTorch庫使用動態更新的圖形進行操作 。 這意味著它可以在流程中更改體系結構。
- 在PyTorch中,您可以使用標準調試器 ,例如pdb或PyCharm。
PyTorch優點:
- 訓練神經網絡的過程簡單明了。 同時,PyTorch支持數據并行和分布式學習模型,并且還包含許多預先訓練的模型。
- PyTorch更適合小型項目和原型設計。
Sonnet
Sonnet深度學習框架是建立在TensorFlow的基礎之上。 它是DeepMind用于創建具有復雜架構的神經網絡。Sonnet基本特性:
- 面向對象的庫,在開發神經網絡(NN)或其他機器學習(ML)算法時更加抽象。
- Sonnet的想法是構造對應于神經網絡的特定部分的主要Python對象。 此外,這些對象獨立地連接到計算TensorFlow圖。 分離創建對象并將其與圖形相關聯的過程簡化了高級體系結構的設計。
Sonnet優點:
- Sonnet的主要優點是可以使用它來重現DeepMind論文中展示的研究,比Keras更容易,因為DeepMind論文模型就是使用Sonnet搭建的。
Keras
Keras是一個機器學習框架,如果您擁有大量數據和/或你想快速入門深度學習,那么Keras將非常適合學習。 Keras是TensorFlow高級集成APi,可以非常方便的和TensorFlow進行融合。這是我強烈推薦學習的一個庫。Keras基本特性:
- 除了Tensorflow之外,Keras還是其他流行的庫(如Theano和CNTK)的高級API。
- 在Keras中更容易創建大規模的深度學習模型,但Keras框架環境配置比其他底層框架要復雜一些。
Keras優點:
- 對于剛剛入門的人來說,Keras是最好的深度學習框架。 它是學習和原型化簡單概念的理想選擇,可以理解各種模型和學習過程的本質。
- Keras是一個簡潔的API。 可以快速幫助您創建應用程序。
- Keras中代碼更加可讀和簡潔。
- Keras模型序列化/反序列化API,回調和使用Python生成器的數據流非常成熟。
順便說一下TensorFlow和Keras的對比:
PS:Tensorflow處于底層框架:這和MXNet,Theano和PyTorch等框架一樣。 包括實現諸如廣義矩陣 - 矩陣乘法和諸如卷積運算的神經網絡原語之類的數學運算。
Keras處于高度集成框架。 雖然更容易創建模型,但是面對復雜的網絡結構時可能不如TensorFlow。
MXNet
MXNet是一種高度可擴展的深度學習工具,可用于各種設備。 雖然與TensorFlow相比,它似乎沒有被廣泛使用,但MXNet的增長可能會因為成為一個Apache項目而得到提升。MXNet基本特性:
- 該框架支持多種語言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。
- 可以在多個GPU和許多機器上非常有效地并行計算。
MXNet優點:
- 支持多個GPU(具有優化的計算和快速上下文切換)
- 清晰且易于維護的代碼(Python,R,Scala和其他API)
- 快速解決問題的能力(對于像我這樣的深度學習新手至關重要)
雖然它不像TF那么受歡迎,但MXNet具有詳細的文檔并且易于使用,能夠在命令式和符號式編程風格之間進行選擇,使其成為初學者和經驗豐富的工程師的理想選擇。
GLUON
Gluon是一個更好的深度學習框架,可以用來創建復雜的模型。GLUON基本特性:
- Gluon的特殊性是具有一個靈活的界面,簡化了原型設計,構建和培訓深度學習模型,而不會犧牲學習速度。
- Gluon基于MXNet,提供簡單的API,簡化深度學習模型的創建。
- 與PyTorch類似,Gluon框架支持使用動態圖表 ,將其與高性能MXNet相結合。 從這個角度來看,Gluon看起來像是分布式計算的Keras非常有趣的替代品。
GLUON優點:
- 在Gluon中,您可以使用簡單,清晰和簡潔的代碼定義神經網絡。
- 它將訓練算法和神經網絡模型結合在一起,從而在不犧牲性能的情況下提供開發過程的靈活性。
- Gluon可以定義動態的神經網絡模型,這意味著它們可以動態構建,使用任何結構,并使用Python的任何本機控制流。
SWIFT
當你聽到Swift時,您可能會考慮iOS或macOS的應用程序開發。但是如果你正在學習深度學習,那么你一定聽說過Swens for Tensorflow。通過直接與通用編程語言集成,Swift for TensorFlow可以以前所未有的方式表達更強大的算法。SWIFT基本特性:
- 可以輕松獲得可微分的自定義數據結構。
- 下一代API 。 通過實踐和研究獲得的新API更易于使用且更強大。
- 在TensorFlow的基礎上 ,Swift API為您提供對所有底層TensorFlow運算符的直接調用。
- 基于Jupyter、LLDB或者Swift in Colab的編程工具提高了您的工作效率。
SWIFT優點:
- 如果動態語言不適合您的任務,那么這將是一個很好的選擇。 當你訓練運行了幾個小時,然后你的程序遇到類型錯誤,那么使用Swift,一種靜態類型語言。您將看到代碼錯誤的地方。
Chainer
直到CMU的DyNet和Facebook的PyTorch出現之前,Chainer是動態計算圖或網絡的領先神經網絡框架,它允許輸入數據長度不一致。chainer基本特性:
- Chainer代碼是在Numpy和CuPy庫的基礎之上用純Python編寫的, Chainer是第一個使用動態架構模型的框架。
Chainer優點:
- 通過自己的基準測試,Chainer明顯比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的測試組中最慢的。
- 比TensorFlow更好的GPU和GPU數據中心性能。最近Chainer成為GPU數據中心性能的全球冠軍。
DL4J
那些使用Java或Scala的人應該注意DL4J(Deep Learning for Java的簡稱)。DL4J的基本特性:
- DL4J中的神經網絡訓練通過簇的迭代并行計算。
- 該過程由Hadoop和Spark架構支持。
- 使用Java允許您在Android設備的程序開發周期中使用。
DL4J優點:
- 如果您正在尋找一個良好的Java深度學習框架,這會是一個非常好的平臺。
ONNX
ONNX項目誕生于微軟和Facebook,旨在尋找深度學習模型呈現的開放格式。 ONNX簡化了在人工智能的不同工作方式之間傳遞模型的過程。 因此ONNX具有各種深度學習框架的優點。ONNX基本特性:
- ONNX使模型能夠在一個框架中進行訓練并轉移到另一個框架中進行推理。 ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,并且還有許多其他常見框架和庫的連接器。
ONNX優點:
- 對于PyTorch開發人員來說,ONNX是一個好的選擇。 但是對于那些喜歡TensorFlow的人來說,Keras等可能好一點。
總結
那么您應該使用哪種深度學習框架?下面是幾點建議:
- 如果你剛剛開始學習,那么最好的選擇是Keras 。
- 出于研究目的,請選擇PyTorch 。
- 對于生產,您需要關注環境。 因此對于google Cloud,最好的選擇是TensorFlow ,適用于AWS - MXNet和Gluon 。
- Android開發人員應該關注D4LJ ,對于iOS來說, Core ML會破壞類似的任務范圍。
- 最后, ONNX將幫助解決不同框架之間的交互問題。