學號:1600030024 姓名:王冠雄
【嵌牛導讀】:現在機器學習逐漸成為行業熱門,經過二十幾年的發展,機器學習目前也有了十分廣泛的應用,如:數據挖掘、計算機視覺、自然語言處理、生物特征識別、搜索引擎、醫學診斷、DNA序列測序、語音和手寫識別、戰略游戲和機器人等方面。
【嵌牛鼻子】:開源,機器學習,用法簡介
【嵌牛提問】:GitHub上最流行的機器學習項目?項目簡介?
【嵌牛正文】:
1. TensorFlow
TensorFlow 是谷歌發布的第二代機器學習系統。據谷歌宣稱,在部分基準測試中,TensorFlow的處理速度比第一代的DistBelief加快了2倍之多。
具體的講,TensorFlow是一個利用數據流圖(Data Flow Graphs)進行數值計算的開源軟件庫:圖中的節點(Nodes)代表數學運算操作,同時圖中的邊(Edges)表示節點之間相互流通的多維數組,即張量(Tensors)。這種靈活的架構可以讓使用者在多樣化的將計算部署在臺式機、服務器或者移動設備的一個或多個CPU上,而且無需重寫代碼;同時任一基于梯度的機器學習算法均可夠借鑒TensorFlow的自動分化(Auto-differentiation);此外通過靈活的Python接口,要在TensorFlow中表達想法也變得更為簡單。
TensorFlow最初由Google Brain小組(該小組隸屬于Google’s Machine Intelligence研究機構)的研究員和工程師開發出來的,開發目的是用于進行機器學習和深度神經網絡的研究。但該系統的通用性足以使其廣泛用于其他計算領域。
目前Google 內部已在大量使用 AI 技術,包括 Google App 的語音識別、Gmail 的自動回復功能、Google Photos 的圖片搜索等都在使用 TensorFlow 。
開發語言:C++
許可協議:Apache License 2.0
GitHub項目地址:https://github.com/tensorflow/tensorflow
2. Scikit-Learn
Scikit-Learn是用于機器學習的Python 模塊,它建立在SciPy之上。該項目由David Cournapeau 于2007年創立,當時項目名為Google Summer of Code,自此之后,眾多志愿者都為此做出了貢獻。
主要特點:
操作簡單、高效的數據挖掘和數據分析
無訪問限制,在任何情況下可重新使用
建立在NumPy、SciPy 和 matplotlib基礎上
Scikit-Learn的基本功能主要被分為六個部分:分類、回歸、聚類、數據降維、模型選擇、數據預處理,具體可以參考官方網站上的文檔。經過測試,Scikit-Learn可在 Python 2.6、Python 2.7 和 Python 3.5上運行。除此之外,它也應該可在Python 3.3和Python 3.4上運行。
注:Scikit-Learn以前被稱為Scikits.Learn。
開發語言:Python
許可協議:3-Clause BSD license
GitHub項目地址:https://github.com/scikit-learn/scikit-learn
3. Caffe
Caffe 是由神經網絡中的表達式、速度、及模塊化產生的深度學習框架。后來它通過伯克利視覺與學習中心(BVLC)和社區參與者的貢獻,得以發展形成了以一個伯克利主導,然后加之Github和Caffe-users郵件所組成的一個比較松散和自由的社區。
Caffe是一個基于C++/CUDA架構框架,開發者能夠利用它自由的組織網絡,目前支持卷積神經網絡和全連接神經網絡(人工神經網絡)。在Linux上,C++可以通過命令行來操作接口,對于MATLAB、Python也有專門的接口,運算上支持CPU和GPU直接無縫切換。
Caffe的特點:
易用性:Caffe的模型與相應優化都是以文本形式而非代碼形式給出, Caffe給出了模型的定義、最優化設置以及預訓練的權重,方便快速使用;
速度快:能夠運行最棒的模型與海量的數據;
Caffe可與cuDNN結合使用,可用于測試AlexNet模型,在K40上處理一張圖片只需要1.17ms;
模塊化:便于擴展到新的任務和設置上;
使用者可通過Caffe提供的各層類型來定義自己的模型;
目前Caffe應用實踐主要有數據整理、設計網絡結構、訓練結果、基于現有訓練模型,使用Caffe直接識別。
開發語言:C++
許可協議: BSD 2-Clause license
GitHub項目地址:https://github.com/BVLC/caffe
4. PredictionIO
PredictionIO 是面向開發人員和數據科學家的開源機器學習服務器。它支持事件采集、算法調度、評估,以及經由REST APIs的預測結果查詢。使用者可以通過PredictionIO做一些預測,比如個性化推薦、發現內容等。PredictionIO 提供20個預設算法,開發者可以直接將它們運行于自己的數據上。幾乎任何應用與PredictionIO集成都可以變得更“聰明”。其主要特點如下所示:
基于已有數據可預測用戶行為;
使用者可選擇你自己的機器學習算法;
無需擔心可擴展性,擴展性好。
PredictionIO 基于 REST API(應用程序接口)標準,不過它還包含 Ruby、Python、Scala、Java 等編程語言的 SDK(軟件開發工具包)。其開發語言是Scala語言,數據庫方面使用的是MongoDB數據庫,計算系統采用Hadoop系統架構。
開發語言:Scala
許可協議: Apache License 2.0
GitHub項目地址:https://github.com/PredictionIO/PredictionIO
5. Brain
Brain是 JavaScript 中的 神經網絡庫。以下例子說明使用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]
當 brain 用于節點中,可使用npm安裝:
npm install brain
當 brain 用于瀏覽器,下載最新的 brain.js 文件。訓練計算代價比較昂貴,所以應該離線訓練網絡(或者在 Worker 上),并使用 toFunction() 或者 toJSON()選項,以便將預訓練網絡插入到網站中。
開發語言:JavaScript
GitHub項目地址:https://github.com/harthur/brain
6. Keras
Keras是極其精簡并高度模塊化的神經網絡庫,在TensorFlow 或 Theano 上都能夠運行,是一個高度模塊化的神經網絡庫,支持GPU和CPU運算。Keras可以說是Python版的Torch7,對于快速構建CNN模型非常方便,同時也包含了一些最新文獻的算法,比如Batch Noramlize,文檔教程也很全,在官網上作者都是直接給例子淺顯易懂。Keras也支持保存訓練好的參數,然后加載已經訓練好的參數,進行繼續訓練。
Keras側重于開發快速實驗,用可能最少延遲實現從理念到結果的轉變,即為做好一項研究的關鍵。
當需要如下要求的深度學習的庫時,就可以考慮使用Keras:
考慮到簡單快速的原型法(通過總體模塊性、精簡性以及可擴展性);
同時支持卷積網絡和遞歸網絡,以及兩者之間的組合;
支持任意連接方案(包括多輸入多輸出訓練);
可在CPU 和 GPU 上無縫運行。
Keras目前支持 Python 2.7-3.5。
開發語言:Python
GitHub項目地址:https://github.com/fchollet/keras
7. CNTK
CNTK(Computational Network Toolkit )是一個統一的深度學習工具包,該工具包通過一個有向圖將神經網絡描述為一系列計算步驟。在有向圖中,葉節點表示輸入值或網絡參數,其他節點表示該節點輸入之上的矩陣運算。
CNTK 使得實現和組合如前饋型神經網絡DNN、卷積神經網絡(CNN)和循環神經網絡(RNNs/LSTMs)等流行模式變得非常容易。同時它實現了跨多GPU 和服務器自動分化和并行化的隨機梯度下降(SGD,誤差反向傳播)學習。
下圖將CNTK的處理速度(每秒處理的幀數)和其他四個知名的工具包做了比較了。配置采用的是四層全連接的神經網絡(參見基準測試腳本)和一個大小是8192 的高效mini batch。在相同的硬件和相應的最新公共軟件版本(2015.12.3前的版本)的基礎上得到如下結果:
CNTK自2015年四月就已開源。
開發語言:C++
GitHub項目地址:https://github.com/Microsoft/CNTK
8. Convnetjs
ConvNetJS是利用Javascript實現的神經網絡,同時還具有非常不錯的基于瀏覽器的Demo。它最重要的用途是幫助深度學習初學者更快、更直觀的理解算法。
它目前支持:
常見的神經網絡模塊(全連接層,非線性);
分類(SVM/ SOFTMAX)和回歸(L2)的成本函數;
指定和訓練圖像處理的卷積網絡;
基于Deep Q Learning的實驗強化學習模型。
一些在線示例:
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
其他:
開發語言:Javascript
許可協議:MIT License
GitHub項目地址:https://github.com/karpathy/convnetjs
9. Pattern
Pattern是Python的一個Web挖掘模塊。擁有以下工具:
數據挖掘:網絡服務(Google、Twitter、Wikipedia)、網絡爬蟲、HTML DOM解析;
自然語言處理:詞性標注工具(Part-Of-Speech Tagger)、N元搜索(n-gram search)、情感分析(sentiment analysis)、WordNet;
機器學習:向量空間模型、聚類、分類(KNN、SVM、 Perceptron);
網絡分析:圖形中心性和可視化。
其文檔完善,目前擁有50多個案例和350多個單元測試。 Pattern目前只支持Python 2.5+(尚不支持Python 3),該模塊除了在Pattern.vector模塊中使用LSA外沒有其他任何外部要求,因此只需安裝 NumPy (僅在Mac OS X上默認安裝)。
開發語言:Python
許可協議:BSD license
GitHub項目地址:https://github.com/clips/pattern