矢量化編程——以MNIST爲例

矢量化編程就是用矢量運算取代所有的顯式for循環。

上一節所用的是512*512*10的數據集很小,我們取的patch很小(8*8),學來的特徵很少(25),而我又註釋掉了梯度校驗(偷懶),所以程序用了1分鐘就跑完了(i5處理器)。

 

但實際上我們遇到的問題規模比這個打太多了,稍微大一點的數據集比如說MNIST,這個數據庫是另外一個更大的手寫體數據庫NIST的子集,包含60000個訓練例子和10000測試樣本,所有的圖片都經過了尺寸標準化和中心化,圖片的大小固定(28*28)。

 

輸入

images= loadMNISTImages('train-images-idx3-ubyte');
display_network(images(:,1:100));

瞧瞧MNIST前100個圖片。

 

圖1


圖片變了,相應可見層和隱藏層的節點都要變,這裏修改一下參數:

visibleSize= 28*28;
hiddenSize= 196;
sparsityParam= 0.1;
lambda= 3e-3;
beta= 3;
images= loadMNISTImages('train-images.idx3-ubyte');
patches=images(:,1:10000);

由於上一節我的代碼已經是矢量化之後的代碼了,這裏就直接拿來用就行了,Andrew說:“Ourimplementation takes around 15-20 minutes on a fast machine.”感受了一下,確實差不多,如果沒有矢量化,估計一上午都難以出結果。

 

運行後直接等就行了10多分鐘就出爐了,鍵盤有點微燙


圖2


歡迎參與討論並關注本博客微博以及知乎個人主頁後續內容繼續更新哦~

轉載請您尊重作者的勞動,完整保留上述文字以及文章鏈接,謝謝您的支持!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章