如何編寫易被複用的,高質量的機器學習演算法代碼?有哪些這樣的代碼示例?請舉例:代碼,原文,你發表的文獻。
01-08
什麼樣的代碼會讓你願意嘗試在自己的數據集上測試,並與之比較。或者說你在科研過程中遇到過哪些非常好用的代碼,它們的哪些特色吸引了你,讓你去試用,測試,比較並引用其原始文獻的?
前面幾個答案看起來都有點答非所問?
個人感覺題主就是在研究怎麼放code出去才會增加自己文章引用。其實相對成熟的研究主題里對比方法都挺容易確定的,因為大家都比那幾個,基本就是:1)幾個經典的+2)和自己的特別像的+3)近兩年的state of the art. (三者可能有重合)
從樓主的問題判斷,我估計你想要的答案在2) 3)里,因為不確定性最大。
於是,從我做對比試驗的習慣來回答這個問題好了,「讓你去試用,測試,比較並引用其原始文獻的」代碼大概有這麼幾個特點:
1、最重要的,文章本身檔次高。CV方向就是三個會議兩個期刊。鑒於只是會議就一年收上千篇,於是就又有兩個標準: 1)oral。 2)從大組or某些牛X人物手下來的。2、代碼質量。這個其實很次要。按尋找過程來,標準大概是這樣。 1)好找 能下載的(都是淚啊)。 主頁上文章後面弄出來個能下載的鏈接是最愛~ 2)體積小的。 嗯,說這條是因為,我干過把奇奇怪怪的data弄進去結果壓縮包巨大的2X事。 3)README寫的清楚的。 格式混亂語法錯誤一堆看起來就不專業直接扔掉。 4)依賴的東西好找的。 -_-經常就要去下載奇奇怪怪的東西了,有的還要求版本。 5)如果需要編譯,能在各種詭異平台上搞定的。6)組織形式,我喜歡那種有個demo,然後完成具體功能的是個函數,按照demo根據自己的數據集改一下調用那個函數直接就能搞定的。
舉例什麼的,題主饒過我吧,都下載了我才不要再找一遍。而且方向不一樣估計沒用吧。。。嚶嚶嚶,我就是懶了。。。我狂找過的大概就那麼幾類:image feature, saliency, hashing。都是code爆多的。SVM方面,首選的肯定是LIBSVM這個庫,應該是應用最廣的機器學習庫了。下面主要推薦一些DeepLearning的GitHub項目吧!1. convnetjs - Star:2200+實現了卷積神經網路,可以用來做分類,回歸,強化學習等。2. DeepLearn Toolbox - Star:1000+Matlab實現中最熱的庫存,包括了CNN,DBN,SAE,CAE等主流模型。3. Deep Learning(yusugomo) - Star:800+實現了深度學習網路,從演算法與實現上都比較全,提供了5種語言的實現:Python,C/C++,Java,Scala,實現的模型有DBN/CDBN/RBM/CRBM/dA/SdA/LR等。
4. Neural-Networks-And-Deep-Learning - Star:500+
這是同名書的配套代碼,語言是Python。5. rbm-mnist - Star:200+這個是hinton matlab代碼的C++改寫版,還實現了Rasmussen的共軛梯度Conjugate Gradient演算法。我從computer vision的角度進行下推薦下vision必備的工具庫吧。
1、vlfeatvlfeat是一個有MATLAB和C interface的視覺演算法庫。它用C實現了絕大多數vision演算法(從經典的SIFT到比較新的Fisher encoding),提供非常非常傻瓜化的MATLAB interface。非常好用和友善。裡面提供的演算法也基本足夠滿足一般的vision應用了。2、theano如樓上所說,theano是一個Python的deep learning package,我現在在做RNN,剩下的我基本用MATLAB自帶函數庫就能解決了……不推薦的
1、caffe愛過……caffe安裝過程太麻煩,而且個人感覺沒theano好用。如果你實在想用caffe提取pre-train feature的話可以去這裡利用VT的伺服器提取CloudCV,第一不用自己本機計算第二省得安裝。2、libsvm和liblinear上面很多人提到了這兩個tool,但是出於某種迷之原因libsvm和liblinear在多種同等設置下的準確度還比不上vlfeat自帶的vlsvm,而且這不是我們一個vision實驗室的問題。由入門到進階svmsgd,基礎的線性模型,簡單的梯度下降演算法,基礎的c++caffe,blas介面的使用,基本的模版,基本的多態,基本的cudamshadow,大量的複雜模版cuda-convnet2,高水平的cuda
推薦閱讀:
※隱馬爾可夫模型是如何應用於語音識別?
※AI產品,科學家和程序員分別做什麼,是怎麼分工的?
※深度強化學習中如何從已有的好行為中快速學習策略?