2014-11-03 76 views
1

這是一個非常簡單的初學者Theano問題。Theano物流SGD,按維度學習率

我試圖修改隨Deep Learning Tutorials一起提供的Logistic SGD代碼,以從單一學習率切換到特定維度的學習率。例如,如果我有3個輸入維度,我想使用3個不同的學習率,每個維度一個。

原相關的代碼是:

learning_rate = 0.1 
x = T.matrix('x') 
y = T.ivector('y') 
classifier = LogisticRegression(input=x, n_in=3, n_out=2) 
cost = classifier.negative_log_likelihood(y) 

g_W = T.grad(cost=cost, wrt=classifier.W) 
g_b = T.grad(cost=cost, wrt=classifier.b) 

updates = [(classifier.W, classifier.W - learning_rate * g_W), 
      (classifier.b, classifier.b - learning_rate * g_b)] 

train_model = theano.function(inputs=[], 
     outputs=cost, 
     updates=updates, 
     givens={ 
      x: minibatch_x, 
      y: minibatch_y}) 

在numpy的,這將是簡單地用學習速率的陣列替換標量學習率的問題,並且與所述梯度g_W和G_B執行逐元素乘法。在Theano這樣做會產生一個錯誤:

'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?' 

顯然有一些關於Theano,我失蹤了。任何人都可以啓發我嗎?

回答

1

確實,您需要用數組替換學習率標量。您可以嘗試以下:

learning_rate = theano.shared(np.array([0.1, 0.2, 0.05])) 

它可能需要根據坡度的形狀進行調換,但本質上你說的正確的路要走,它應該使用一個共享的變量。