1. 程式人生 > >你的計算機也可以看懂世界——十分鐘跑起卷積神經網路(Windows+CPU)

你的計算機也可以看懂世界——十分鐘跑起卷積神經網路(Windows+CPU)

眾所周知,如果你想研究Deep Learning,那麼比較常用的配置是Linux+GPU,不過現在很多非計算機專業的同學有時也會想採用Deep Learning方法來完成一些工作,那麼Linux+GPU的環境就有可能會給他們帶來一定困擾,我寫這篇文章就是為了讓這些同學可以不用去裝Linux系統,不用去涉及GPU,就可以基於Caffe框架跑出一個簡單的神經網路。

CNN基礎知識:https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit(沒基礎的還應該另外瞭解一些神經網路演算法的基礎知識,例如前饋傳遞,BP演算法等,有基礎的也推薦再通過這個連結鞏固一番,以下的文章會假設你對於CNN有比較全面和紮實的理解)

所需系統環境:windows7 sp1及以上系統,win7 sp1以下的會不會有什麼錯誤我不知道,對了,是64位系統哦~

其他環境:Visual Studio 2013,cygwin 2.871(其他版本應該也可以,主要是用來在windows系統上模擬一個非常簡易的linux環境,因為應用上只會用到一些很基礎的命令,所以早一點的版本也無所謂)

Windows版Caffe框架:https://github.com/Microsoft/caffe

首先,需要將windows版本的Caffe框架下載到本地,隨便下到哪都行,然後隨便解壓縮到哪都行,我解壓完之後,Caffe框架的根目錄就是H:\caffe-master\caffe-master。解壓完之後,我們可以很明顯地發現,這個框架還是一塊未編譯的“生肉”,是不能直接使用的,所以我們需要利用VS2013對其進行編譯,但是在此之前,還有一個步驟,因為我們是小窮逼,我們沒有動輒上萬的GPU,但是賈大神所在的土豪實驗室有用不完的GPU,所以這裡預設的還是GPU模式的框架,我們需要對這一點進行修改,具體方式就是修改根目錄中windows資料夾中的CommonSettings.props.example檔案,具體修改方式是:

一、將該檔案重新命名為CommonSettings.props;

二、將該檔案中的

<CpuOnlyBuild>false</CpuOnlyBuild>
<UseCuDNN>true</UseCuDNN>

改為

<CpuOnlyBuild>true</CpuOnlyBuild>
<UseCuDNN>false</UseCuDNN>

至於這裡面的CuDNN是什麼,之後會提到,現在先不用瞭解~

三、儲存該檔案。

在將框架改為CPU模式之後,就可以雙擊開啟windows資料夾中的Caffe.sln檔案,然後在VS2013中點選最上方的生成->重新生成解決方案即可,需要注意的是,進行這一步之前最好將Debug模式改成Release,就像這樣。

經過一段時間的編譯,在VS2013下端的顯示臺上會顯示生成成功的資訊,這時候這個框架就編譯完成了,而生成的可執行檔案caffe.exe的位置在根目錄中的Build\x64\Release之中,同時還會生成一大堆的依賴包和各類庫,這裡各位先不用在意,今天的任務主要會和caffe.exe發生接觸。

編譯好了框架之後,可以說是萬事俱備,只欠資料集和網路模型了,在第一次的嘗試中,CSDN的卜居大神所推崇的使用Yann LeCun大神(我習慣於說成楊樂村大神)提出的LeNet-5網路模型來進行對MNIST資料集的學習是非常適合的。

MNIST資料集是一個手寫數字的資料庫,所以可想而知,這次訓練的目的是讓你的計算機學會“看懂數字”。

MNIST資料集在哪裡獲取呢?Caffe框架已經為你想到了這一點,所以在H:\caffe-master\caffe-master\data\mnist中的get_mnist.sh指令碼就是用來幫你下載這個資料集的,理論上,這個指令碼的執行需要Linux的環境支援,但是我們現在用的是windows環境,怎麼辦呢?很簡單,還記得之前所說的cygwin嗎?沒錯,就用它!有關cygwin的安裝和配置可以看看這個http://www.cygwin.cn/site/install/。

現在,你已經安裝好了cygwin,並已經將其雙擊開啟,只需要在這個黑框框裡如下輸入,然後回車,就會為你自動下載MNIST資料集(注意,如果不FQ是沒有辦法下載的,推薦一下我一直用的Psiphon3,這個名字一搜就能搜到,你們懂的)。

 

(忽略我的電腦名字是Celia,用的實驗室的機器,懶得改了。。。)

這時候,你會發現在data\mnist資料夾中出現了

,也就是說,MNIST資料集已經成功地下載下來了。

那麼這個資料集是不是可以直接用了呢?答案是不能。為什麼呢?因為到這一步為止,我們的資料集還只是二進位制檔案,需要轉換為lmdb檔案才可以被Caffe框架識別,所以這其中還有一個轉換的過程,對於windows使用者來說,這個轉換是比較煩的,以至於我自己也沒有試過,但是由於我之前一直在Ubuntu系統中使用這個框架,所以我們可以採用如下的兩種方法:

一、在Ubuntu系統中,首先cd進Caffe框架的根目錄,之後只需通過簡單的一行命令:

./examples/mnist/create_mnist.sh

即可完成資料的轉換工作,那麼因為這裡我們不希望去使用Ubuntu,所以我比較推薦第二種方法。

二、去網上找資源。。。MNIST資料集的lmdb檔案在網上是容易找到的,這裡我也用我的網盤分享了一份,http://pan.baidu.com/s/1o86O7Xo。

假設你是從我的網盤下載的,那麼現在只需要把這個下載下來的檔案解壓,然後把解壓出來的mnist_train_lmdb以及mnist_test_lmdb資料夾放到examples/mnist中即可。

至於我們使用的LeNet-5模型,眼尖的同學應該已經發現了,早就已經存在於examples/mnist資料夾中了。

現在,我們有了框架,有了資料集,有了模型,那麼就快要大功告成了。接下來,只需要在windows自帶的cmd命令列介面中如下輸入:

 

之後按下回車,就大功告成啦,只需在黑框框中不斷跳文字的過程中靜靜地等待即可。。。這個訓練時間主要和你的計算機的配置有關,訓練完成時的狀態是這樣的:

 

可以看到,最終的正確率達到了驚人的99.09%,而損失也降到了0.026495。通過訓練之後生成的權重也儲存在了mnist資料夾中的lenet_iter_10000.caffemodel之中。這時候,我們可以通過訓練好的模型來對測試集進行測試。測試所需程式碼如下:

 

最後,我們可以發現這個模型在測試集上的正確率達到了非常驚人的程度。

 

這樣,我們就可以說,你的計算機上成功地誕生了神經網路,而你的計算機同時也成功學會了“認識數字”。

備註:本人非常樂意分享我的文章,轉載請註明我的部落格地址:http://www.cnblogs.com/matthewli/與原文地址:http://www.cnblogs.com/matthewli/p/6048907.html,謝謝!