2013-06-26 59 views
1

我開發了一個圖像處理程序,用於識別給出的數字是什麼數字。每張圖像都是27x27像素= 729像素。我取每個R,G和B值,這意味着每個圖像中有2187個變量(截距+1 =總共2188)。如何處理大量機器學習功能

我用下面的梯度下降公式:

Repeat { 
    θj = θj−α/m∑(hθ(x)−y)xj 
} 

θj哪裏是變量j的係數; α是學習率; hθ(x)是假設; y是實際值,xj是變量j的值。 m是訓練集的數量。 hθ(x),y針對每個訓練集(即,這是和號的用途)。此外,該假說被定義爲:

hθ(x) = 1/(1+ e^-z) 
z= θo + θ1X1+θ2X2 +θ3X3...θnXn 

有了這個,和3000個訓練圖像,我可以只需要一個多小時,訓練我的計劃中,當在交叉驗證組測試,它能夠識別正確的圖像〜67%的時間。

我想改善的是,所以我決定嘗試程度2.

然而變量的數目跳躍的多項式從2188到2394766每形象!我需要一個小時才能完成1步的梯度下降。

所以我的問題是,如何在機器學習中處理大量的變量?一方面,我沒有足夠的空間來爲每個訓練集保存許多變量。另一方面,我目前每訓練樣本存儲2188個變量,但爲了得到每個變量的值乘以另一個變量(即多項式到2次的值),我必須執行O(n^2)。

所以,任何建議/建議,非常感謝。

+0

你應該看看隨機(迷你批)梯度下降爲此事。 –

回答

1
  • 首先嚐試使用一些降維(PCA,核PCA,或LDA如果你是分類圖像)

  • 矢量化的梯度下降 - 與大多數的數學庫或MATLAB等它會運行得更快

  • 並行算法,然後在多個CPU上運行(但也許你對乘以向量庫已經支持並行計算)