1. 程式人生 > >(讀書筆記)各深度學習框架簡要介紹

(讀書筆記)各深度學習框架簡要介紹

1.Tensorflow

Tensorflow是由Google Brain開發並開源的相對高階的機器學習庫,使用者可以方便地用它設計神經網路結構,而不必為了追求高效率的實現親自寫C++或CUDA程式碼。Tensorflow支援自動求導。Tensorflow核心程式碼由C++編寫,簡化了線上部署的複雜度,使之能在手機這類記憶體和CPU資源都很緊張的裝置上也可運行復雜模型。除了支援C++之外,Tensorflow還有Python、Go、Java、Julia、Node.js、R等語音的介面支援。不過使用Python時有一個影響效率的問題,每一個mini-batch要從Python中feed到網路中,這個過程在mini-batch的資料量很小或者執行時間很短時,可能會帶來比較大的延遲。

Tensorflow是一種資料流式的框架,這使得它支援非常自由的演算法表達,除了深度學習以及機器學習的演算法外,還可以實現偏微分方程求解之類的方法。事實上,只要可以將計算表示成計算圖形式,就可以使用Tensorflow。使用者可以寫內層迴圈程式碼控制計算圖分支的計算,Tensorflow會自動將相關的分支轉化為子圖並執行迭代運算。

在資料並行模式上,Tensorflow和Parameter Server很像,但Tensorflow有獨立的Variable node,不想其他框架有一個全域性統一的引數伺服器,因此引數同步更加自由。

Tensorflow另外一個重要特點是它靈活的移植性,可以經過很少的修改甚至不需要修改就可以輕鬆部署到有任意數量CPU或GPU的PC、伺服器或者移動裝置上。相比於Theano,Tensorflow還有一個優勢就是它極快的編譯速度,在定義新網路結構時代價會很小。

Tensorflow還具有十分強大的視覺化元件Tensorboard,可以幫助視覺化網路結構和訓練過程,對於觀察複雜的網路結構和監控長時間、大規模的訓練很有幫助。Tensorboard目前支援5種視覺化:標量(scalars)、圖片(images)、音訊(audio)、直方圖(histgrams)和計算圖(computation graph)。標量可以用來監控loss、學習率、準確率等值的變化趨勢;圖片可以用來展示訓練過程使用者設定儲存的圖片,如重建效果圖或者matplotlib繪製的圖片等;計算圖則可以完全展示全部的計算圖,並且支援縮放拖拽和檢視節點屬性。

Tensorflow的一個薄弱地方在於計算圖必須構建為靜態圖,這讓很多計算變得難以實現,尤其是序列預測中經常使用的beam search。

2.Caffe

Caffe全稱為Convolutional Architecture for Fast Feature Embedding,由伯克利視覺學中心(BVLC)釋出和維護。有事主要包括以下幾點:

(1)容易上手,網路結構都是以配置檔案形式定義,不需要用程式碼涉及網路

(2)訓練速度快,能夠訓練state-of-the-art的模型與大規模的資料

(3)組建模組化,可以方便地拓展到新的網路模型和學習任務上

Caffe的核心概念是layer,每一個神經網路的模組都是一個layer。layer接收輸入資料,並通過內部計算產生輸出資料。在設計網路結構時,通過寫protobuf配置檔案把各個layer拼接在一起即可構成完整的網路。每一個layer需要定義兩種運算:正向傳播的預測過程和反向傳播的訓練過程。實現新的layer時,需要將兩種計算過程的函式都實現,這部分計算需要使用者自己編寫C++或CUDA(運用GPU計算時)程式碼。Caffe最開始設計的目標只針對影象,沒有考慮文字、語音或時間序列資料,因此Caffe對於卷積神經網路的支援很好,但對時間序列RNN、LSTM等支援不是特別充分。同時,基於layer的模式在定義RNN結構時也比較麻煩。

Caffe的一大優勢是擁有大量訓練好的經典模型(ALexNet、VGG、Inception)乃至其他state-of-the-art的模型(ResNet等),收藏在其Model Zoo(http://github.com/BVLC/caffe/wiki/Model-Zoo)。由於Caffe的底層是基於C++的,因此其移植性也十分良好。Caffe也提供了python語言介面pycaffe,不過,通常使用者還是使用protobuf配置檔案定義神經網路結構,在使用命令列進行訓練或預測。protobuf檔案是一個類似JSON型別的.prototxt檔案,其中使用許多順序連線的layer來描述神經網路結構,Caffe的執行程式會提取這些檔案並按其定義來訓練網路。不過在.prototxt檔案內部設計網路結構可能會比較受限,沒有像Tensorflow或者Keras那麼方便自由。而且,Caffe的配置檔案不能用程式設計的方式調整超引數,也沒有提供像Scikit-learn那樣好用的estimator可以方便地進行交叉驗證、超引數的Grid Search等操作。

3.Theano

Theano誕生於2008年,由蒙特利爾大學Lisa Lab團隊開發並維護,是一個高效能的符號計算及深度學習庫,被認為是這類庫的始祖之一。Theano的核心是一個數學表示式的編譯器,專門為處理大規模神經網路訓練的計算而設計。Theano的主要優勢如下:

(1)整合Numpy,可以直接使用Numpy的ndarray,API介面學習成本低

(2)計算穩定性好,比如可以精準地計算輸出值很小的函式(如log(1+x))

(3)動態地生成C或者CUDA程式碼,用以編譯成高效的機器程式碼,並連結各種可以加速的庫,如BLAS、CUDA等

雖然Theano支援Linux、Mac和Windows,但是沒有底層C++的介面,因此模型的部署十分不方便,依賴於各種python庫,並且不吃只各種移動裝置,所以幾乎沒有在工業生產環境的應用,更多地被當作一個研究工具。

Theano在運算時需要將使用者的python程式碼轉換成CUDA程式碼,再編譯為二進位制可執行檔案,編譯複雜模型的時間非常久。此外,匯入過程也很慢,而且一旦選擇了某塊GPU,就無法切換到其他裝置。不過,Theano在訓練簡單網路(如很淺的MLP)時效能可能比Tensorflow好,因為全部程式碼都是執行時編譯,不需要想Tensorflow那樣每次feed mini-batch時都得通過低效的python迴圈來實現。

Theano是完全基於python的符號計算庫,使用者定義的各種運算,Theano可以自動求導。Theano對CNN和RNN的支援都很好,實現起來簡單高效,這讓Theano可以支援大部分state-of-the-art的網路。Theano派生出了大量基於它的深度學習庫,其中就有Keras、Lassage等,體現了Theano在深度學習屆的基石作用。儘管其十分重要,但直接使用Theano設計大型神經網路還是太繁瑣了。

4.Torch

Torch的定位就是LuaJIT上的一個高效科學計算哭,支援大量的機器學習演算法,同時以GPU上的計算優先。Torch包含大量的機器學習、計算機視覺、訊號處理、並行運算、影象、視訊、音訊、網路處理的庫,並且擁有大量訓練好的深度學習模型。同時,它還支援設計非常複雜的神經網路的拓撲圖結構,在並行化到CPU和GPU上,在Torch上設計新的layer是相對簡單的。Torch使用的語言是Lua,官方給出了一下幾點使用LuaJIT而不使用Python的理由:

(1)LuaJIT的通用計算效能遠勝於Python,而且可以直接在LuaJIT中操作C的pointers

(2)Torch的框架,包含Lua是自洽的,而完全基於Python的程式對不同平臺、系統移植性較差,依賴的外部庫較多

(3)LuaJIT的FFI拓展介面非常易學,可以方便地連結其他庫到Torch中

Torch的nn庫支援神經網路、自編碼器、線性迴歸、CNN、RNN等,同時支援定製的損失函式及梯度計算。Lua做資料預處理等操作可以隨意使用迴圈等,而不必像Python那樣擔心效能問題,也不需要學習Python中各種加速運算的庫。但Lua流行度不比Python,學習成本較大。Torch和Caffe一樣也是基於layer的連線來定義網路,其新的layer依然需要使用者自己實現,但方式和定義網路的方式類似,非常簡便,這點和Caffe不同。同時,Torch屬於指令式程式設計模式,不想Theano、Tensorflow屬於宣告式程式設計(計算圖是預定義的靜態的結構),所以用它實現某些複雜操作(如beam search)要更為方便。

5.Keras

Keras是一個崇尚極簡、高度模組化的神經網路庫,使用Python實現,並可以同時執行在Tensorflow和Theano後端上。它旨在讓使用者進行最快速的原型試驗,讓想法變為結果的過程最短,相比Theano和Tensorflow的通用性,Keras則專精於深度學習。它提供目前為止最方便的API,使用者只需要將高階的模組拼在一起,就可以設計神經網路。他同時支援CNN和RNN,支援級聯的模型或任意的圖結構模型(可以讓某些資料跳過某些layer和後面的layer對接,使得建立Inception等複雜網路更為容易),從CPU上計算切換到GPU加速無須任何程式碼改動。

Keras的所有模組都是簡潔、易懂、完全可配置、可隨意插拔的,並且基本上沒有任何使用限制,神經網路、損失函式、優化器、初始化方法、啟用函式和正則化等模組都是可以隨便組合的。同時,新的模組也很容易新增,這使得Keras非常適合最前沿的研究。Keras最大的問題可能是目前無法直接使用多GPU,所以對大規模資料處理速度沒有其他支援多GPU或分散式的框架塊。Keras的程式設計模型設計和Torch很想,但相比Torch,Keras構建在Python上,有一套完整的科學計算工具鏈。

6.CNTK

CNTK(Computational Network Toolkit)是微軟研究院(MSR)開源的深度學習框架,在語音識別領域的應用尤其廣泛。CNTK通過一個有向圖將神經網路描述為一系列的運算操作,這個有向圖中子節點代表輸入或網路引數,其他節點代表各種矩陣運算。CNN支援各類前饋網路,也支援自動求導。

CNTK設計是效能導向的,在CPU、單/多GPU以及GPU叢集上都有優異的表現。CNTK擁有很高的靈活度,可以和Caffe一樣通過配置檔案定義網路結構,且支援構建任意的計算圖,支援AdaGrad、RmsProp等優化方法。同時,CNTK還將支援其他語言的繫結,包括Python,C++和C#,使得使用者可以用程式設計的方式涉及網路結構。PC上支援Linux、Mac和Windows,但是目前不支援ARM架構,限制了在移動裝置上的發揮。

7.其他深度學習框架

I.Lasagne

II.MXNet

III.DIGITS

IV.Deeplearning4J

V.Chainer

VI.Leaf

VII.DSSTNE

相關推薦

讀書筆記深度學習框架簡要介紹

1.TensorflowTensorflow是由Google Brain開發並開源的相對高階的機器學習庫,使用者可以方便地用它設計神經網路結構,而不必為了追求高效率的實現親自寫C++或CUDA程式碼。Tensorflow支援自動求導。Tensorflow核心程式碼由C++編寫

學習筆記:《深度學習框架PyTorch入門與實踐》陳雲Part1

       學習筆記:《深度學習框架PyTorch入門與實踐》(陳雲)Part1     2017年1月,FAIR團隊在GitHub上開源了PyTorch。     常見的深度學習框架:  

指尖上行--移動前端開發進階之路讀書筆記----1.3常用庫和框架

chapter 1 移動頁面開發 頁面佈局 頁面除錯 常用庫和框架 1.3 常用庫和框架 1.3.1 jQuery Mobile jQuery Mobile是jQuery 框架的一個元件(而非jquery的移動版本)。這個框架已經很老了,本人

JavaScript高階程式設計讀書筆記之函式表示式

定義函式的方式有兩種:一種是函式宣告,另一種就是函式表示式。 函式宣告的一個重要特徵就是函式宣告提升(function declaration hoisting),意思是在執行程式碼前會先讀取函式宣告。 這個例子不會報錯,因為程式碼在執行前會先讀取函式宣告。理解函式提升的關鍵就是區別函式宣告和函式表示式之

JavaScript高階程式設計讀書筆記之BOM

BOM(Browser Object Model)提供了很多物件用於訪問瀏覽器的功能,這些功能與任何網頁內容無關。 8.1 window物件 BOM的核心物件是window,它表示一個瀏覽器例項。在瀏覽器中,window物件有雙重角色,window物件既是JavaScript訪問瀏覽器視窗的一個介面,又是E

深入理解Java虛擬機器——垃圾收集器與記憶體分配策略讀書筆記

判斷物件是否存活 1、引用計數法 給物件新增一個引用計數器,每當有一個地方引用它時,計數器值加1,當引用失效時,計數器值減1, 任何時刻計數器為0的物件就是不可能再被使用的。 缺點:不能解決物件之間迴圈引用的問題 2、根搜尋演算法(GC Roots Tracing)

看板系統的首要目標與次要目標 讀書筆記

看板系統的首要目標-----以最小的阻力匯入變革。     引入視覺化和限制在製品來促進變革,進而優化現有流程。由於現有的角色與職責都沒有改變,所以來自員工的抵觸與阻力也是最小的。 看板系統還有其他

oracle層次查詢connect by 讀書筆記

--oracle層次查詢connect by  --首先給scott使用者授查詢許可權:GRANT SELECT ON employees TO scott;GRANT SELECT ON jobs TO scott;CREATE TABLE employee AS SEL

JavaScript高階程式設計讀書筆記

本筆記彙總了作者認為“JavaScript高階程式設計”這本書的前七章知識重點,僅供參考。 第七章 函式表示式 小結: 在JavaScript程式設計中,函式表示式是一種非常有用的技術。使用函式表示式可以無須對函式命名,從而實現動態程式設計。

讀書筆記網頁UI與使用者體驗設計5要素---1.1感官體驗要素之設計風格

網站進行設計前,必須明確該網站所針對的目標客戶群體,並對目標客戶群體的審美喜好進行分析,從而確定網站的總體設計風格。 超清晰風格:清晰實用 極簡風格:易於建立和維護,但細節上煞費苦心 照片:運用恰當的話生動有衝擊力意義豐富,不恰當的話會很糟糕           如果

智慧社群----網際網路時代的未來家園讀書筆記

新加坡智慧社群服務點系統主要包括電子商務、電子政務、社群醫療及社群文娛四個系統。系統的各項職能主要通過政府開辦的政務類網站及民間組織開辦的互助類網站、論壇和社群資訊查詢網站來實現       日本社群服務系統主要包括以便利店及生活協同組合為主要形式的電子商務資訊系統,以宣傳和諮詢服務為主的電子政務資訊系統,以

Java記憶體回收知識讀書筆記--深入理解Java虛擬機器——JVM高階特性與最佳實踐(第2版)2.2~2.3

1.哪些地方的記憶體要回收? Java程式運時的記憶體包括以下幾部分:程式計數器,Java虛擬機器棧,本地方法棧,Java堆,方法區(執行時常量池是方法區的一部分)。 程式計數器,Java虛擬機器棧,本地方法棧是隨執行緒而生,隨執行緒而亡,它們的分配的記憶體大小已知,因此不

指尖上行--移動前端開發進階之路讀書筆記----1.1頁面佈局

chapter 1 移動頁面開發 頁面佈局 頁面除錯 常用庫和框架 1.1 頁面佈局 1.1.1 Vieport(視口,檢視視窗) 裝置畫素 物理畫素:螢幕解析度; 裝置獨立畫素:CSS畫素(eg:IPhone5 CSS畫素是320*568p

RBD儲存的接收以及相關概念讀書筆記

RDB進行持久化    RDB持久化可以手動執行,也可以根據伺服器配置選項定期執行。該功能可以將某個時間點上的資料庫狀態儲存到一個RDB儲存到一個檔案中。    RDB持久化功能所生產的RDB檔案是一個經過壓縮的二進位制檔案,通過該檔案可以還原生成RDB檔案資料庫狀態   

搜尋引擎之路--- 《搜尋引擎---資訊檢索實踐》讀書筆記

     搜尋引擎是指根據一定的策略,運用特定的計算機程式從網際網路上收集,在對資訊進行組織和處理後,為使用者提供檢索服務,並將檢索相關的資訊提供給使用者的系統。搜尋引擎的研究方向包含架構方向(索引、檢索),策略方向(排序、查詢與結果處理)。本文簡要總結了搜尋引擎---資訊

響應式Web設計:HTML5和CSS3實戰讀書筆記

視口:瀏覽器視窗內的內容區域,不包含工具欄,標籤欄。網頁實際顯示. 螢幕尺寸:裝置物理顯示區域 各種寬度和高度 a、可視區的真實寬度和高度 document.documentElement.clientWid

軟考-架構師-第二章-作業系統 第五節 檔案管理 讀書筆記

主要針對希賽出版的架構師考試教程《系統架構設計師教程(第4版)》,作者“希賽教育軟考學院”。完成相關的讀書筆記以便後期自查,僅供個人學習使用,不得用於任何商業用途。 第五節 檔案管理 每一種軟體資源本身都是具有一定邏輯意義的相關資訊的集合,在

Java 執行緒安全問題及執行緒鎖讀書筆記

多執行緒安全問題: 首先整理多執行緒同步的知識點,開頭肯定是要先探討探討多執行緒安全的問題。那麼嘛叫執行緒安全問題呢? 答: 我們知道Jvm虛擬機器的設計中執行緒的執行是搶佔式的,執行緒的執行時間是由底層系統決定的。所以就會有多個執行緒修改同一個資料時不同

指尖上行--移動前端開發進階之路讀書筆記----2.1動畫形式

chapter 2 技術創意形式 動畫形式 移動裝置 Web API 詳解 WebVR 創意點 2.1 動畫形式 2.1.1 CSS3 CSS3 Cascading Style Sheets 層疊樣式表。 CSS3是CSS技術的一個升級版本,

計算機網路讀書筆記

基本概念 三網:電信網路、有線電視網路、計算機網路。 ISP(因特網服務提供者):主幹ISP、地區ISP、本地ISP IXP( Internet eXchange Point)英特網交換點 計算機之間的通訊:主機A的某個程序和主機B上的另一個程序進行通訊