從Theano到Lasagne:基于Python的深度學習的框架和庫(譯文)
來自: http://www.csuldw.com/2015/08/12/2015-08-12-theano-to-lasagne/
英文鏈接: http://creative-punch.net/2015/07/frameworks-and-libraries-for-deep-learning/
深度學習是機器學習和人工智能的一種形式,利用堆積在彼此頂部的神經網絡的多個隱藏層來嘗試形成對數據更深層次的“理解”。
最近,深度神經網絡以“Deep Dreams”形式在網站中如雨后春筍般出現,或是像谷歌研究原創論文中描述的那樣:Inceptionism。
在這篇文章中,我們將討論幾個不同的深度學習框架,庫以及工具。
Python深度學習
Theano
主頁: http://deeplearning.net/software/theano/
Github網址: https://github.com/Theano/Theano
Theano不僅是這篇文章中將要討論的其他框架的核心庫,于其自身而言,它也是一個強大的庫,幾乎能在任何情況下使用,從簡單的logistic回歸到建模并生成音樂和弦序列或是使用長短期記憶人工神經網絡對電影收視率進行分類。
Theano大部分代碼是使用Cython編寫,Cython是一個可編譯為本地可執行代碼的Python方言,與僅僅使用解釋性Python語言相比,它能夠使運行速度快速提升。最重要的是,很多優化程序已經集成到Theano庫中,它能夠優化你的計算量并讓你的運行時間保持最低。
如果速度的提升還不能滿足你,它還內置支持使用CUDA在GPU上執行那些所有耗時的計算。所有的這一切僅僅只需要修改配置文件中的標志位即可。在CPU上運行一個腳本,然后切換到GPU,而對于你的代碼,則不需要做任何變化。
同時我們應該注意到,盡管Theano使用Cython和CUDA對其性能大大提升,但你仍然可以僅僅使用Python語言來創建幾乎任何類型的神經網絡結構。
Pylearn2
主頁: http://deeplearning.net/software/pylearn2/
Github網址: https://github.com/lisa-lab/pylearn2
Pylearn2和Theano由同一個開發團隊開發,Pylearn2是一個機器學習庫,它把深度學習和人工智能研究許多常用的模型以及訓練算法封裝成一個單一的實驗包,如隨機梯度下降。
你也可以很輕松的圍繞你的類和算法編寫一個封裝程序,為了能讓它在Pylearn2上運行,你需要在一個單獨的YAML格式的配置文件中配置你整個神經網絡模型的參數。
除此之外,它還有很多數據集及其預編譯好的軟件包,所以,你現在就可以直接使用MNIST數據集開始做實驗了!
Blocks
Github網址: https://github.com/mila-udem/blocks
Blocks是一個非常模塊化的框架,有助于你在Theano上建立神經網絡。目前它支持并提供的功能有:
構建參數化Theano運算,稱之為“bricks”。
在大型模型中使用模式匹配來選擇變量以及“bricks”。
使用算法優化模型。
訓練模型的保存和恢復。
在訓練過程中檢測和分析值(訓練集以及測試集)。
圖形變換的應用,如dropout。
Keras
主頁: http://keras.io/
Github網址: https://github.com/fchollet/keras
Keras是一個簡約的、高度模塊化的神經網絡庫,設計參考了Torch,基于Theano和Python語言編寫,支持GPU和CPU。它的開發側重于實現快速試驗和創造新的深度學習模型。
如果你需要具有以下功能的深度學習庫,采用Keras就恰到好處:
可以很容易地、快速地建立原型(通過總體模塊化,極簡化并且可擴展化)。
支持卷積網絡和遞歸網絡,以及兩者的組合。
支持任意連接方式(包括多輸入多輸出訓練)。
Keras庫與其他采用Theano庫的區別是Keras的編碼風格非常簡約、清晰。它把所有的要點使用小類封裝起來,能夠很容易地組合在一起并創造出一種全新的模型。
Lasagne
Github網址: https://github.com/Lasagne/Lasagne
Lasagne不只是一個美味的意大利菜,也是一個與Blocks和Keras有著相似功能的深度學習庫,但其在設計上與它們有些不同。
下面是Lasagne的一些設計目的:
簡單化:它應該是易于使用和擴展的機器學習庫。每添加一個特征,就應該考慮其對易用性和擴展性的影響。每一個抽象概念的加入都應該仔細檢查,以確定增加的復雜性是否合理。
小接口:盡可能少的類和方法。盡可能依賴Theano的功能和數據類型,遵循Theano的規定。如果沒有嚴格的必要,不要在類中封裝東西。這會使它更容易使用庫并且擴展它(不需要有太多的認知)。
不礙事:未使用的功能應該是不可見的,用戶不會考慮他們不使用的功能。盡可能單獨的使用庫文件中的組件。
透明性:不要試圖掩蓋Theano,盡量以Python或NumPy數據類型的形式將函數和方法返回給Theano表達式。
重點:遵循Unix哲學“做一件事,并把它做好”,重點集中在前饋神經網絡。
實用主義:使普通用例更易于使用,這要比支持每一個可能的用例更為重要。
譯者簡介: 劉帝偉 ,中南大學軟件學院在讀研究生,關注機器學習、數據挖掘及生物信息領域。