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