2016-05-16 80 views
3

我目前正在研究使用千層麪/ Theano的復發神經網絡。千層麪/ Theano漸變值

訓練時,使用Theano的符號梯度計算更新。

grads = theano.grad(loss_or_grads, params) 

雖然梯度表達是一般完全正常,我也爲了監測培訓感興趣的梯度

我現在的問題是,如果有一個內置的方法也可以獲得梯度值,我目前還沒有找到,或者我必須自己做。

在此先感謝

回答

5

我不知道任何烤寬麪條函數來計算梯度的,但你可以自己用簡單的theano功能得到它。

假設我們有以下theano變量:

  • inputs =輸入到網絡
  • targets =目標網絡
  • loss =損失函數的值,定義爲的函數的輸出網絡輸出和targets
  • l_hid =網絡的復發層,類型lasagne.layers.RecurrentLayer

假設我們對損失函數w.r.t的梯度感興趣。經常性的權重:

grad = theano.grad(loss, l_hid.W_hid_to_hid) 

定義theano函數爲梯度

get_grad = theano.function([inputs, targets], grad) 

得到的數值現在,只需要調用get_grad用於輸入和目標的任何值(例如當前minibatch)。 get_grad()不需要傳遞權重的值,因爲它們存儲爲theano共享變量。