深度學習在今天之因此可以很是普及,很重要的一個緣由是因爲學術界和工業界貢獻的各類各樣的開源軟件,這些開源的軟件中集成了不少深度學習中用到的網絡細節,也使咱們的開發便捷了許多,下面咱們來介紹幾種深度學習中經常使用的框架,並將這幾種框架作個對比。javascript
http://caffe.berkeleyvision.orgCaffe 框架在圖像、視頻領域的應用很是普遍,它的特色有如下幾點:java
爲了讀取圖像,以及簡單的圖像處理,連接很重的 OpenCV 庫Boost 來實現一些 C++ 的高級特徵HD5/LMDB/LEVELDB 用來作數據的 IOProtoBuffer 使用隨處可見python
Blob模塊:實現了Tensor的功能,保持數據和梯度Layer模塊:根據輸入計算輸出,同時保存權重/梯度Net模塊:由多個layer組成,實現前向或後向的計算Solver模塊:最優化模塊,利用梯度值更新權重git
引入 protocol buffer技術,省去編寫大量描述性的 C++代碼,好比配置參數、屬性變量等等方便序列化,用戶能夠直接閱讀 prototxt文件,來了解網絡結構github
Prototxt:用來描述網絡,經過 Google 的 protobuffer 編譯器直接讀取/序列化 C++ 的對象caffemodel:用來保存權重文件微信
須要提早作數據準備,保存爲 LMDB/LevelDB等格式網絡
不用編寫 C++代碼,直接編寫 .prototxt定義net對象框架
直接編寫 .prototxt 定義 solver對象機器學習
經過參數直接執行 caffe 命令進行訓練編輯器
下面分紅四步對其進行說明:第一步:數據準備階段xx/xx/xx.jpg label ## 每行都是這樣的格式經過tools/create_xxxx命令產生LMDB/LevelDB等格式的數據文件
第二步:編寫網絡文件規則簡單的,能夠直接用文本編輯器生成,網絡複雜的,利用python腳本生成。(值得注意的是net prototxt文件描述的是有向無環圖)
對於複雜的網絡來講,好比殘差網絡,手寫很容易出錯,或者一些層數較多的網絡,咱們均可以採用Python來編寫網絡結構文件
第三步:定義solver文件簡單手動編寫設置好須要的參數
第四步:訓練網絡
Caffe 還給咱們提供了 Model Zoo(網站:https://github.com/BVLC/caffe/wiki/Model-Z)裏面有不少已經訓練好的模型,像 AlexNet,VGG,GoogleNet 等等,咱們只需進入網站下載須要的模型便可拿來使用,很是方便。
http://torch.chTorch 能夠算得上是最靈活、最容易學習的深度學習框架了,也很適合初學者學習。該框架使用的是 Lua 語言,相似於 javascript 的動態語言,LuaJit 性能高於大多數的腳本語言,結合 C語言開發很是簡單。Torch 有如下三個主要特色:
靈活的框架:使用 Lua語言做爲控制應用層,完全的模塊化設計
友好的交互:快速學習深度學習中各個組件的功能
全程可控的訓練過程:適合實驗新的網絡類型
所見即所得的交互式環境
require(‘cutorch’)
require(‘cunn’)
切換tensor類型
https://www.tensorflow.orgTensorflow 能夠說是目前學者們最普遍應用的深度學習框架,它是一個用於數值計算的 Python庫,能夠描述一幅數據計算的數據流圖(data flow graph)。TensorFlow 最初由 Google 大腦小組(隸屬於 Google 機器智能研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可普遍用於其餘計算領域。它有如下幾點須要注意:
Google 研發主推
基於 computation graphs 計算模型
Python/C++ 語言
TensorBoard 可視化工具
多機多卡支持
它的編寫書寫以下:
同時它還支持使用 TensorBoard 可視化查看各類網絡的輸出和許多中間參數的變化過程。
文章的最後,小編對以上三種框架作了一個總結
Torch 最適合初學者學習(但須要掌握 Lua語言)
TensorFlow 是目前的主流框架,應多多關注
Caffe 目前仍是產品化最多的庫
---------End---------
關注後回覆「w」,加我私人微信
推薦閱讀:閱讀是投資本身最有效的方式自律是一種覺醒