[深度學習]深度學習框架總結

深度學習庫比較

庫名 主語言 從語言 速度 靈活性 文檔 適合模型 平臺 上手難易 開發者 模式
Tensorflo C++ cuda/python/Matlab/Ruby/R 中等 中等 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 的優勢是:

它有一個直觀的結構 ,顧名思義它有 「張量流」,你能夠輕鬆地可視每一個圖中的每個部分。
輕鬆地在 cpu / gpu 上進行分佈式計算
平臺的靈活性 。能夠隨時隨地運行模型,不管是在移動端、服務器仍是 PC 上。
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

1.1 TensorFlow 的限制

儘管 TensorFlow 是強大的,它仍然是一個低水平庫,例如,它能夠被認爲是機器級語言,但對於大多數功能,您須要本身去模塊化和高級接口,如 keras
它仍然在繼續開發和維護,這是多麼��啊!
它取決於你的硬件規格,配置越高越好
不是全部變成語言能使用它的 API 。
TensorFlow 中仍然有不少庫須要手動導入,好比 OpenCL 支持。
上面提到的大多數是在 TensorFlow 開發人員的願景,他們已經制定了一個路線圖,計劃庫將來應該如何開發
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.2 ensorFlow工做流程

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

1.3 入門教程

http://www.woaipu.com/shops/zuzhuan/61406html

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

2.Caffe

Caffe57是純粹的C++/CUDA架構,支持命令行、Python和MATLAB接口;能夠在CPU和GPU173直接無縫切換: Caffe::set_mode(Caffe::GPU);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.1 Caffe的優點

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

2.2 Caffe 架構

http://www.woaipu.com/shops/zuzhuan/61406c++

此處輸入圖片的描述

2.2.1 預處理圖像的leveldb構建

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

2.2.2 CNN網絡配置文件

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

2.3 教程

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

3.pytorch框架

pytorch,語法相似numpy,很是高效;基於pytorch開發深度學習算法,方便快速,適合cpu和gpu計算。pytorch支持動態構建神經網絡結構,從而能夠提高挽留過結構的重用性。

這是一個基於Python的科學計算包,其旨在服務兩類場合:
1.替代numpy發揮GPU潛能
2.一個提供了高度靈活性和效率的深度學習實驗性平臺
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

3.1 PyTorch優點

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

3.2 PyTorch工具包

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

3.3 教程

PyTorch深度學習:60分鐘入門(Translation)編程

4 MXNet框架

4.1 優缺點

4.1.1 優勢

http://www.woaipu.com/shops/zuzhuan/61406服務器

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

4.1.2 缺點

http://www.woaipu.com/shops/zuzhuan/61406網絡

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

4.2 MXNet架構

此處輸入圖片的描述 

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

##4.2 MXNet編程接口 

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

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

5.2.2 缺點

1)是接口爲lua語言,須要一點時間來學習。 2)沒有Python接口 3)與Caffe同樣,基於層的網絡結構,其擴展性很差,對於新增長的層,須要本身實現(forward, backward and gradient update)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5.3 Torch教程

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

6. Theano框架

6.2 Theano優缺點

6.2.1 優勢

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

6.2.2 缺點

1)編譯過程慢,但一樣採用符號張量圖的TF無此問題 2)import theano也很慢,它導入時有不少事要作 3)做爲開發者,很難進行改進,由於code base是Python,而C/CUDA代碼被打包在Python字符串中
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • http://www.woaipu.com/shops/zuzhuan/61406

6.3 Theano教程

http://www.woaipu.com/shops/zuzhuan/61406

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

相關文章
相關標籤/搜索