深度學習庫比較


 

深度學習庫比較

庫名 主語言 從語言 速度 靈活性 文檔 適合模型 平台 上手難易 開發者 模式
Tensorflo C++ cuda/python 中等 中等 CNN/RNN Linux,OSX Google 分布式/聲明式
Caffe C++ cuda/python/Matlab 一般 全面 CNN 所有系統 中等 賈楊清 聲明式
PyTorc python C/C++ 中等 中等 - -- 中等 FaceBook  
MXNet c++ cuda/R/julia 全面 CNN 所有系統 中等 李沐和陳天奇等 分布式/聲明式/命令式
Torch lua C/cuda 全面 CNN/RNN Linux,OSX 中等 Facebook 命令式
Theano python c++/cuda 中等 中等 CNN/RNN Linux, OSX 蒙特利爾理工學院 命令式
 

1.TensorFlow 的優點是:

 
  1. 它有一個直觀的結構 ,顧名思義它有 “張量流”,你可以輕松地可視每個圖中的每一個部分。
  2. 輕松地在 cpu / gpu 上進行分布式計算
  3. 平台的靈活性 。可以隨時隨地運行模型,無論是在移動端、服務器還是 PC 上。
 

1.1 TensorFlow 的限制

 
  1. 盡管 TensorFlow 是強大的,它仍然是一個低水平庫,例如,它可以被認為是機器級語言,但對於大多數功能,您需要自己去模塊化和高級接口,如 keras
  2. 它仍然在繼續開發和維護,這是多么👍啊!
  3. 它取決於你的硬件規格,配置越高越好
  4. 不是所有變成語言能使用它的 API
  5. TensorFlow 中仍然有很多庫需要手動導入,比如 OpenCL 支持。
  6. 上面提到的大多數是在 TensorFlow 開發人員的願景,他們已經制定了一個路線圖,計划庫未來應該如何開發
 

1.2 ensorFlow工作流程

 
  1. 建立一個計算圖, 任何的數學運算可以使用 TensorFlow 支撐。
  2. 初始化變量, 編譯預先定義的變量
  3. 創建 session 這是神奇的開始的地方
  4. session 中運行圖, 編譯圖形被傳遞到 session ,它開始執行它。
  5. 關閉 session 結束這次使用。
 

1.3 入門教程

TensorFlow入門一-小石頭的碼瘋窩 
TensorFlow之深入理解Neural Style 
TensorFlow之深入理解AlexNet-小石頭的碼瘋窩 
TensoFlow之深入理解GoogLeNet-小石頭的碼瘋窩 
TensorFlow之深入理解VGG\Residual Network 
TensorFlow之深入理解Fast Neural Style 
風格畫之最后一彈MRF-CNN-小石頭的碼瘋窩 
深度學習之Neural Image Caption

 

2.Caffe

 
  1. Caffe57是純粹的C++/CUDA架構,支持命令行、PythonMATLAB接口;可以在CPUGPU173直接無縫切換:
  2. Caffe::set_mode(Caffe::GPU);
 

2.1 Caffe的優勢

 
  1. 1.上手快:模型與相應優化都是以文本形式而非代碼形式給出。
  2. 2.Caffe給出了模型的定義、最優化設置以及預訓練的權重,方便立即上手。
  3. 3.速度快:能夠運行最棒的模型與海量的數據。
  4. 4.CaffecuDNN結合使用,測試AlexNet模型,在K40上處理每張圖片只需要1.17ms.
  5. 5.模塊化:方便擴展到新的任務和設置上。
  6. 6.可以使用Caffe提供的各層類型來定義自己的模型。
  7. 7.開放性:公開的代碼和參考模型用於再現。
  8. 8.社區好:可以通過BSD-2參與開發與討論。
 

2.2 Caffe 架構

此處輸入圖片的描述

 

2.2.1 預處理圖像的leveldb構建

 
  1. 輸入:一批圖像和label 23
  2. 輸出:leveldb 4
  3. 指令里包含如下信息:
  4. conver_imageset (構建leveldb的可運行程序)
  5. train/ (此目錄放處理的jpg或者其他格式的圖像)
  6. label.txt (圖像文件名及其label信息)
  7. 輸出的leveldb文件夾的名字
  8. CPU/GPU (指定是在cpu上還是在gpu上運行code)
 

2.2.2 CNN網絡配置文件

 
  1. Imagenet_solver.prototxt (包含全局參數的配置的文件)
  2. Imagenet.prototxt (包含訓練網絡的配置的文件)
  3. Imagenet_val.prototxt (包含測試網絡的配置文件)
 

2.3 教程

Caffe教程系列之安裝配置 
Caffe教程系列之LeNet訓練 
Caffe教程系列之元素篇 
Caffe教程系列之Proto元素 
Caffe教程系列之LMDB

 

3.pytorch框架

 
  1. pytorch,語法類似numpy,非常高效;基於pytorch開發深度學習算法,方便快速,適合cpugpu計算。pytorch支持動態構建神經網絡結構,從而可以提升挽留過結構的重用性。
  2. 這是一個基於Python的科學計算包,其旨在服務兩類場合:
  3. 1.替代numpy發揮GPU潛能
  4. 2.一個提供了高度靈活性和效率的深度學習實驗性平台
 

3.1 PyTorch優勢

 
  1. 1.運行在 GPU CPU 之上、基礎的張量操作庫,
  2. 2.內置的神經網絡庫
  3. 3.模型訓練功能
  4. 3.支持共享內存的多進程並發(multiprocessing )庫。PyTorch開發團隊表示:這對數據載入和 hogwild 訓練十分有幫助。
  5. 4.PyTorch 的首要優勢是,它處於機器學習第一大語言 Python 的生態圈之中,使得開發者能接入廣大的 Python 庫和軟件。因此,Python 開發者能夠用他們熟悉的風格寫代碼,而不需要針對外部 C 語言或 C++ 庫的 wrapper,使用它的專門語言。雷鋒網(公眾號:雷鋒網)獲知,現有的工具包可以與 PyTorch 一起運行,比如 NumPySciPy Cython(為了速度把 Python 編譯成 C 語言)。
  6. 4.PyTorch 還為改進現有的神經網絡,提供了更快速的方法——不需要從頭重新構建整個網絡
 

3.2 PyTorch工具包

 
  1. 1.torch :類似 NumPy 的張量庫,強 GPU 支持
  2. 2.torch.autograd :基於 tape 的自動區別庫,支持 torch 之中的所有可區分張量運行。
  3. 3.torch.nn :為最大化靈活性未涉及、與 autograd 深度整合的神經網絡庫
  4. 4.torch.optim:與 torch.nn 一起使用的優化包,包含 SGD, RMSProp, LBFGS, Adam 等標准優化方式
  5. 5.torch.multiprocessing python 多進程並發,進程之間 torch Tensors 的內存共享。
  6. 6.torch.utils:數據載入器。具有訓練器和其他便利功能。 Trainer and other utility functions for convenience
  7. 7.torch.legacy(.nn/.optim) :處於向后兼容性考慮,從 Torch 移植來的 legacy 代碼。
 

3.3 教程

PyTorch深度學習:60分鍾入門(Translation)

 

4 MXNet框架

 

4.1 優缺點

 

4.1.1 優點

 
  1. 1.速度快省顯存。在復現一個caffe
  2. 2.支持多語言
  3. 3.分布式
 

4.1.2 缺點

 
  1. 1. API文檔差。這個問題很多人也提過了,很多時候要看源碼才能確定一個函數具體是做什么的,看API描述有時候並不靠譜,因為文檔有點過時。
  2. 2. 缺乏完善的自定義教程。比如寫data iter的時候,trainvalidationdata shape必須一致,這是我當時找了半天的一個bug
  3. 3.代碼小bug有點多。mxnet的大神們開發速度確實是快,但是有的layer真的是有bug,暑假我們就修了不少。
 

4.2 MXNet架構

此處輸入圖片的描述 

從上到下分別為各種主語言的嵌入,編程接口(矩陣運算,符號表達式,分布式通訊),兩種編程模式的統一系統實現,以及各硬件的支持。接下一章我們將介紹編程接口,然后下一章介紹系統實現。之后我們給出一些實驗對比結果,以及討論MXNet的未來。 

##4.2 MXNet編程接口 

1.Symbol : 聲明式的符號表達式 
2.NDArray :命令式的張量計算 
3.KVStore :多設備間的數據交互 
4.讀入數據模塊 
5.訓練模塊 

##4.3 MXNet教程 
安裝GPU版mxnet並跑一個MNIST手寫數字識別 
用MXnet實戰深度學習之二:Neural art

#5. Torch框架 
##5.1 Torch誕生 

Torch誕生已經有十年之久,但是真正起勢得益於去年Facebook開源了大量Torch的深度學習模塊和擴展。Torch另外一個特殊之處是采用了不怎么流行的編程語言Lua(該語言曾被用來開發視頻游戲)。 

 

5.2 Torch優缺點

 

5.2.1 優點

 
  1. 1Facebook力推的深度學習框架,主要開發語言是CLua
  2. 2)有較好的靈活性和速度
  3. 3)它實現並且優化了基本的計算單元,使用者可以很簡單地在此基礎上實現自己的算法,不用浪費精力在計算優化上面。核心的計算單元使用C或者cuda做了很好的優化。在此基礎之上,使用lua構建了常見的模型
  4. 4)速度最快,見convnet-benchmarks
  5. 5)支持全面的卷積操作:
  6. 時間卷積:輸入長度可變,而TFTheano都不支持,對NLP非常有用;
  7. 3D卷積:Theano支持,TF不支持,對視頻識別很有用
 

5.2.2 缺點

 
  1. 1)是接口為lua語言,需要一點時間來學習。
  2. 2)沒有Python接口
  3. 3)與Caffe一樣,基於層的網絡結構,其擴展性不好,對於新增加的層,需要自己實現(forward, backward and gradient update
 

5.3 Torch教程

MXNet教程 
深度學習筆記(二)用Torch實現線性回歸

 

6. Theano框架

 

6.2 Theano優缺點

 

6.2.1 優點

 
  1. 12008年誕生於蒙特利爾理工學院,主要開發語言是Python
  2. 2Theano派生出了大量深度學習Python軟件包,最著名的包括BlocksKeras
  3. 3Theano的最大特點是非常的靈活,適合做學術研究的實驗,且對遞歸網絡和語言建模有較好的支持
  4. 4)是第一個使用符號張量圖描述模型的架構
  5. 5)支持更多的平台
  6. 6)在其上有可用的高級工具:Blocks, Keras
 

6.2.2 缺點

 
  1. 1)編譯過程慢,但同樣采用符號張量圖的TF無此問題
  2. 2import theano也很慢,它導入時有很多事要做
  3. 3)作為開發者,很難進行改進,因為code basePython,而C/CUDA代碼被打包在Python字符串中
 

6.3 Theano教程

Theano 官方中文教程(翻譯)(三)——多層感知機(MLP) 
Theano官方中文教程(翻譯)(四)—— 卷積神經網絡(CNN)

 
 
  2017-04-16 11:52  字數 4204  閱讀 6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM