GitHub上最受歡迎的28款開源的機(jī)器學(xué)習(xí)項目,TensorFlow位列其中
現(xiàn)在機(jī)器學(xué)習(xí)逐漸成為行業(yè)熱門,經(jīng)過二十幾年的發(fā)展,機(jī)器學(xué)習(xí)目前也有了十分廣泛的應(yīng)用,如:數(shù)據(jù)挖掘、計算機(jī)視覺、自然語言處理、生物特征識別、搜索引擎、醫(yī)學(xué)診斷、DNA序列測序、語音和手寫識別、戰(zhàn)略游戲和機(jī)器人等方面。
云棲社區(qū)特意翻譯整理了目前GitHub上最受歡迎的28款開源的機(jī)器學(xué)習(xí)項目,以供開發(fā)者參考使用。
1. TensorFlow
TensorFlow 是谷歌發(fā)布的第二代機(jī)器學(xué)習(xí)系統(tǒng)。據(jù)谷歌宣稱,在部分基準(zhǔn)測試中,TensorFlow的處理速度比第一代的DistBelief加快了2倍之多。
具體的講,TensorFlow是一個利用數(shù)據(jù)流圖(Data Flow Graphs)進(jìn)行數(shù)值計算的開源軟件庫:圖中的節(jié)點( Nodes)代表數(shù)學(xué)運(yùn)算操作,同時圖中的邊(Edges)表示節(jié)點之間相互流通的多維數(shù)組,即張量(Tensors)。這種靈活的架構(gòu)可以讓使用者在多樣化的將計算部署在臺式機(jī)、服務(wù)器或者移動設(shè)備的一個或多個CPU上,而且無需重寫代碼;同時任一基于梯度的機(jī)器學(xué)習(xí)算法均可夠借鑒TensorFlow的自動分化(Auto-differenTIaTIon);此外通過靈活的Python接口,要在TensorFlow中表達(dá)想法也變得更為簡單。
TensorFlow最初由Google Brain小組(該小組隸屬于Google's Machine Intelligence研究機(jī)構(gòu))的研究員和工程師開發(fā)出來的,開發(fā)目的是用于進(jìn)行機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)的研究。但該系統(tǒng)的通用性足以使其廣泛用于其他計算領(lǐng)域。
目前Google 內(nèi)部已在大量使用 AI 技術(shù),包括 Google App 的語音識別、Gmail 的自動回復(fù)功能、Google Photos 的圖片搜索等都在使用 TensorFlow 。
開發(fā)語言:C++
許可協(xié)議:Apache License 2.0
GitHub項目地址:https://github.com/tensorflow/tensorflow
2. Scikit-LearnScikit-Learn是用于機(jī)器學(xué)習(xí)的Python 模塊,它建立在SciPy之上。該項目由David Cournapeau 于2007年創(chuàng)立,當(dāng)時項目名為Google Summer of Code,自此之后,眾多志愿者都為此做出了貢獻(xiàn)。
主要特點:
操作簡單、高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析
無訪問限制,在任何情況下可重新使用
建立在NumPy、SciPy 和 matplotlib基礎(chǔ)上
Scikit-Learn的基本功能主要被分為六個部分:分類、回歸、聚類、數(shù)據(jù)降維、模型選擇、數(shù)據(jù)預(yù)處理,具體可以參考官方網(wǎng)站上的文檔。經(jīng)過測試,Scikit-Learn可在 Python 2.6、Python 2.7 和 Python 3.5上運(yùn)行。除此之外,它也應(yīng)該可在Python 3.3和Python 3.4上運(yùn)行。
注:Scikit-Learn以前被稱為Scikits.Learn。
開發(fā)語言:Python
許可協(xié)議:3-Clause BSD license
GitHub項目地址:https://github.com/scikit-learn/scikit-learn
3.CaffeCaffe 是由神經(jīng)網(wǎng)絡(luò)中的表達(dá)式、速度、及模塊化產(chǎn)生的深度學(xué)習(xí)框架。后來它通過伯克利視覺與學(xué)習(xí)中心((BVLC)和社區(qū)參與者的貢獻(xiàn),得以發(fā)展形成了以一個伯克利主導(dǎo),然后加之Github和Caffe-users郵件所組成的一個比較松散和自由的社區(qū)。
Caffe是一個基于C++/CUDA架構(gòu)框架,開發(fā)者能夠利用它自由的組織網(wǎng)絡(luò),目前支持卷積神經(jīng)網(wǎng)絡(luò)和全連接神經(jīng)網(wǎng)絡(luò)(人工神經(jīng)網(wǎng)絡(luò))。在Linux上,C++可以通過命令行來操作接口,對于MATLAB、Python也有專門的接口,運(yùn)算上支持CPU和GPU直接無縫切換。
Caffe的特點
易用性:Caffe的模型與相應(yīng)優(yōu)化都是以文本形式而非代碼形式給出, Caffe給出了模型的定義、最優(yōu)化設(shè)置以及預(yù)訓(xùn)練的權(quán)重,方便快速使用;
速度快:能夠運(yùn)行最棒的模型與海量的數(shù)據(jù);
Caffe可與cuDNN結(jié)合使用,可用于測試AlexNet模型,在K40上處理一張圖片只需要1.17ms;
模塊化:便于擴(kuò)展到新的任務(wù)和設(shè)置上;
使用者可通過Caffe提供的各層類型來定義自己的模型;
目前Caffe應(yīng)用實踐主要有數(shù)據(jù)整理、設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練結(jié)果、基于現(xiàn)有訓(xùn)練模型,使用Caffe直接識別。
開發(fā)語言:C++
許可協(xié)議: BSD 2-Clause license
GitHub項目地址:https://github.com/BVLC/caffe
4. PredicTIonIOPredicTIonIO 是面向開發(fā)人員和數(shù)據(jù)科學(xué)家的開源機(jī)器學(xué)習(xí)服務(wù)器。它支持事件采集、算法調(diào)度、評估,以及經(jīng)由REST APIs的預(yù)測結(jié)果查詢。使用者可以通過PredictionIO做一些預(yù)測,比如個性化推薦、發(fā)現(xiàn)內(nèi)容等。PredictionIO 提供20個預(yù)設(shè)算法,開發(fā)者可以直接將它們運(yùn)行于自己的數(shù)據(jù)上。幾乎任何應(yīng)用與PredictionIO集成都可以變得更“聰明”。其主要特點如下所示:
基于已有數(shù)據(jù)可預(yù)測用戶行為;
使用者可選擇你自己的機(jī)器學(xué)習(xí)算法;
無需擔(dān)心可擴(kuò)展性,擴(kuò)展性好。
PredictionIO 基于 REST API(應(yīng)用程序接口)標(biāo)準(zhǔn),不過它還包含 Ruby、Python、Scala、Java 等編程語言的 SDK(軟件開發(fā)工具包)。其開發(fā)語言是Scala語言,數(shù)據(jù)庫方面使用的是MongoDB數(shù)據(jù)庫,計算系統(tǒng)采用Hadoop系統(tǒng)架構(gòu)。
開發(fā)語言:Scala
許可協(xié)議:Apache License 2.0
GitHub項目地址:https://github.com/PredictionIO/PredictionIO
5. BrainBrain是 JavaScript 中的 神經(jīng)網(wǎng)絡(luò)庫。以下例子說明使用Brain來近似 XOR 功能:
var net = new brain.NeuralNetwork();net.train([{input: [0, 0], output: [0]},{input: [0, 1], output: [1]},{input: [1, 0], output: [1]},{input: [1, 1], output: [0]}]);var output = net.run([1, 0]);// [0.987]
當(dāng) brain 用于節(jié)點中,可使用npm安裝:
npm install brain
當(dāng) brain 用于瀏覽器,下載最新的 brain.js 文件。訓(xùn)練計算代價比較昂貴,所以應(yīng)該離線訓(xùn)練網(wǎng)絡(luò)(或者在 Worker 上),并使用 toFunction()或者toJSON()選項,以便將預(yù)訓(xùn)練網(wǎng)絡(luò)插入到網(wǎng)站中。
開發(fā)語言:JavaScript
GitHub項目地址:https://github.com/harthur/brain
6. KerasKeras是極其精簡并高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,在TensorFlow 或 Theano 上都能夠運(yùn)行,是一個高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,支持GPU和CPU運(yùn)算。Keras可以說是Python版的Torch7,對于快速構(gòu)建CNN模型非常方便,同時也包含了一些最新文獻(xiàn)的算法,比如Batch Noramlize,文檔教程也很全,在官網(wǎng)上作者都是直接給例子淺顯易懂。Keras也支持保存訓(xùn)練好的參數(shù),然后加載已經(jīng)訓(xùn)練好的參數(shù),進(jìn)行繼續(xù)訓(xùn)練。
Keras側(cè)重于開發(fā)快速實驗,用可能最少延遲實現(xiàn)從理念到結(jié)果的轉(zhuǎn)變,即為做好一項研究的關(guān)鍵。
當(dāng)需要如下要求的深度學(xué)習(xí)的庫時,就可以考慮使用Keras:
考慮到簡單快速的原型法(通過總體模塊性、精簡性以及可擴(kuò)展性);
同時支持卷積網(wǎng)絡(luò)和遞歸網(wǎng)絡(luò),以及兩者之間的組合;
支持任意連接方案(包括多輸入多輸出訓(xùn)練);
可在CPU 和 GPU 上無縫運(yùn)行。
Keras目前支持 Python 2.7-3.5。
開發(fā)語言:Python
GitHub項目地址:https://github.com/fchollet/keras
7. CNTKCNTK(Computational Network Toolkit )是一個統(tǒng)一的深度學(xué)習(xí)工具包,該工具包通過一個有向圖將神經(jīng)網(wǎng)絡(luò)描述為一系列計算步驟。在有向圖中,葉節(jié)點表示輸入值或網(wǎng)絡(luò)參數(shù),其他節(jié)點表示該節(jié)點輸入之上的矩陣運(yùn)算。
CNTK 使得實現(xiàn)和組合如前饋型神經(jīng)網(wǎng)絡(luò)DNN、卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs/LSTMs)等流行模式變得非常容易。同時它實現(xiàn)了跨多GPU 和服務(wù)器自動分化和并行化的隨機(jī)梯度下降(SGD,誤差反向傳播)學(xué)習(xí)。
下圖將CNTK的處理速度(每秒處理的幀數(shù))和其他四個知名的工具包做了比較了。配置采用的是四層全連接的神經(jīng)網(wǎng)絡(luò)(參見基準(zhǔn)測試腳本)和一個大小是8192 的高效mini batch。在相同的硬件和相應(yīng)的最新公共軟件版本(2015.12.3前的版本)的基礎(chǔ)上得到如下結(jié)果:
CNTK自2015年四月就已開源。
開發(fā)語言:C++
GitHub項目地址:https://github.com/Microsoft/CNTK
8. ConvnetjsConvNetJS是利用Javascript實現(xiàn)的神經(jīng)網(wǎng)絡(luò),同時還具有非常不錯的基于瀏覽器的Demo。它最重要的用途是幫助深度學(xué)習(xí)初學(xué)者更快、更直觀的理解算法。
它目前支持:
常見的神經(jīng)網(wǎng)絡(luò)模塊(全連接層,非線性);
分類(SVM/ SOFTMAX)和回歸(L2)的成本函數(shù);
指定和訓(xùn)練圖像處理的卷積網(wǎng)絡(luò);
基于Deep Q Learning的實驗強(qiáng)化學(xué)習(xí)模型。
一些在線示例:
Convolutional Neural Network on MNIST digits
Convolutional Neural Network on CIFAR-10
Toy 2D data
Toy 1D regression
Training an Autoencoder on MNIST digits
Deep Q Learning Reinforcement Learning demo+Image Regression ("Painting")+Comparison of SGD/Adagrad/Adadelta on MNIST開發(fā)語言:Javascript 許可協(xié)議:MIT License GitHub項目地址:https://github.com/karpathy/convnetjs
9. Pattern
Pattern是Python的一個Web挖掘模塊。擁有以下工具:
數(shù)據(jù)挖掘:網(wǎng)絡(luò)服務(wù)(Google、Twitter、Wikipedia)、網(wǎng)絡(luò)爬蟲、HTML DOM解析;
自然語言處理:詞性標(biāo)注工具(Part-Of-Speech Tagger)、N元搜索(n-gram search)、情感分析(sentiment analysis)、WordNet;
機(jī)器學(xué)習(xí):向量空間模型、聚類、分類(KNN、SVM、 Perceptron);
網(wǎng)絡(luò)分析:圖形中心性和可視化。
其文檔完善,目前擁有50多個案例和350多個單元測試。 Pattern目前只支持Python 2.5+(尚不支持Python 3),該模塊除了在Pattern.vector模塊中使用LSA外沒有其他任何外部要求,因此只需安裝 NumPy (僅在Mac OS X上默認(rèn)安裝)。
開發(fā)語言:Python
許可協(xié)議:BSD license
GitHub項目地址:https://github.com/clips/pattern
10. NuPIC
NuPIC是一個實現(xiàn)了HTM學(xué)習(xí)算法的機(jī)器智能平臺。HTM是一個關(guān)于新(大腦)皮質(zhì)(Neocortex)的詳細(xì)人工智能算法。HTM的核心是基于時間的連續(xù)學(xué)習(xí)算法,該算法可以存儲和調(diào)用時間和空間兩種模式。NuPIC可以適用于解決各類問題,尤其是異常檢測和流數(shù)據(jù)源預(yù)測方面。
NuPIC Binaries文件目前可用于:
Linux x86 64bit
OS X 10.9
OS X 10.10
Windows 64bit
NuPIC 有自己的獨(dú)特之處。許多機(jī)器學(xué)習(xí)算法無法適應(yīng)新模式,而NuPIC的運(yùn)作接近于人腦,當(dāng)模式變化的時候,它會忘掉舊模式,記憶新模式。
開發(fā)語言:Python
GitHub項目地址:https://github.com/numenta/nupic
11. TheanoTheano是一個Python庫,它允許使用者有效地定義、優(yōu)化和評估涉及多維數(shù)組的數(shù)學(xué)表達(dá)式,同時支持GPUs和高效符號分化操作。Theano具有以下特點:
與NumPy緊密相關(guān)--在Theano的編譯功能中使用了Numpy.ndarray ;
透明地使用GPU--執(zhí)行數(shù)據(jù)密集型計算比CPU快了140多倍(針對Float32);
高效符號分化--Theano將函數(shù)的導(dǎo)數(shù)分為一個或多個不同的輸入;
速度和穩(wěn)定性的優(yōu)化--即使輸入的x非常小也可以得到log(1+x)正確結(jié)果;
動態(tài)生成 C代碼--表達(dá)式計算更快;
廣泛的單元測試和自我驗證--多種錯誤類型的檢測和判定。
自2007年起,Theano一直致力于大型密集型科學(xué)計算研究,但它目前也很被廣泛應(yīng)用在課堂之上( 如Montreal大學(xué)的深度學(xué)習(xí)/機(jī)器學(xué)習(xí)課程)。
開發(fā)語言:Python
GitHub項目地址:https://github.com/Theano/Theano
12. MXNet
MXNet是一個兼具效率和靈活性的深度學(xué)習(xí)框架。它允許使用者將符號編程和命令式編程相結(jié)合,以追求效率和生產(chǎn)力的最大化。其核心是動態(tài)依賴調(diào)度程序,該程序可以動態(tài)自動進(jìn)行并行化符號和命令的操作。其中部署的圖形優(yōu)化層使得符號操作更快和內(nèi)存利用率更高。該庫輕量且便攜帶,并且可擴(kuò)展到多個GPU和多臺主機(jī)上。
主要特點:
其設(shè)計說明提供了有用的見解,可以被重新應(yīng)用到其他DL項目中;
任意計算圖的靈活配置;
整合了各種編程方法的優(yōu)勢最大限度地提高靈活性和效率;
輕量、高效的內(nèi)存以及支持便攜式的智能設(shè)備;
多GPU擴(kuò)展和分布式的自動并行化設(shè)置;
支持Python、R、C++和 Julia;
對“云計算”友好,直接兼容S3、HDFS和Azure。
MXNet不僅僅是一個深度學(xué)習(xí)項目,它更是一個建立深度學(xué)習(xí)系統(tǒng)的藍(lán)圖、指導(dǎo)方針以及黑客們對深度學(xué)習(xí)系統(tǒng)獨(dú)特見解的結(jié)合體。
開發(fā)語言:Jupyter Notebook
開源許可:Apache-2.0license
GitHub項目地址:https://github.com/dmlc/mxnet
13. Vowpal WabbitVowpal Wabbit是一個機(jī)器學(xué)習(xí)系統(tǒng),該系統(tǒng)推動了如在線、散列、Allreduce、Learning2search、等方面機(jī)器學(xué)習(xí)前沿技術(shù)的發(fā)展。 其訓(xùn)練速度很快,在20億條訓(xùn)練樣本,每個訓(xùn)練樣本大概100個非零特征的情況下:如果特征的總位數(shù)為一萬時,訓(xùn)練時間為20分鐘;特征總位數(shù)為1000萬時,訓(xùn)練時間為2個小時。Vowpal Wabbit支持分類、 回歸、矩陣分解和LDA。
當(dāng)在Hadoop上運(yùn)行Vowpal Wabbit時,有以下優(yōu)化機(jī)制:
懶惰初始化:在進(jìn)行All Reduce之前,可將全部數(shù)據(jù)加載到內(nèi)存中并進(jìn)行緩存。即使某一節(jié)點出現(xiàn)了錯誤,也可以通過在另外一個節(jié)點上使用錯誤節(jié)點的數(shù)據(jù)(通過緩存來獲取)來繼續(xù)訓(xùn)練。
Speculative Execution:在大規(guī)模集群當(dāng)中,一兩個很慢的Mapper會影響整個Job的性能。Speculative Execution的思想是當(dāng)大部分節(jié)點的任務(wù)完成時,Hadoop可以將剩余節(jié)點上的任務(wù)拷貝到其他節(jié)點完成。
開發(fā)語言:C++
GitHub項目地址:https://github.com/JohnLangford/vowpal_wabbit
14. Ruby Warrior通過設(shè)計了一個游戲使得Ruby語言和人工智能學(xué)習(xí)更加有樂趣和互動起來。
使用者扮演了一個勇士通過爬上一座高塔,到達(dá)頂層獲取珍貴的紅寶石(Ruby)。在每一層,需要寫一個Ruby腳本指導(dǎo)戰(zhàn)士打敗敵人、營救俘虜、到達(dá)樓梯。使用者對每一層都有一些認(rèn)識,但是你永遠(yuǎn)都不知道每層具體會發(fā)生什么情況。你必須給戰(zhàn)士足夠的人工智能,以便讓其自行尋找應(yīng)對的方式。
勇士的動作相關(guān)API:
Warrior.walk: 用來控制勇士的移動,默認(rèn)方向是往前;
warrior.feel:使用勇士來感知前方的情況,比如是空格,還是有怪物;
Warrior.attack:讓勇士對怪物進(jìn)行攻擊;
Warrior.health:獲取勇士當(dāng)前的生命值;
Warrior.rest:讓勇士休息一回合,恢復(fù)最大生命值的10%。
勇士的感知API:
Space.empty:感知前方是否是空格;
Space.stairs:感知前方是否是樓梯;
Space.enemy: 感知前方是否有怪物;
Space.captive:感知前方是否有俘虜;
Space.wall:感知前方是否是墻壁。
開發(fā)語言:Ruby
GitHub項目地址:https://github.com/ryanb/ruby-warrior
以上為GitHub上最流行的開源機(jī)器學(xué)習(xí)項目TOP14,“28款GitHub最流行的開源機(jī)器學(xué)習(xí)項目(二)”。