2017-05-06 62 views
0

我想了解下面一段theano代碼。theano.function中更新的功能

self.sgd_step = theano.function(
      [x, y, learning_rate, theano.Param(decay, default=0.9)], 
      [], 
      updates=[(E, E - learning_rate * dE/T.sqrt(mE + 1e-6)), 
        (U, U - learning_rate * dU/T.sqrt(mU + 1e-6)), 
        (W, W - learning_rate * dW/T.sqrt(mW + 1e-6)), 
        (V, V - learning_rate * dV/T.sqrt(mV + 1e-6)), 
        (b, b - learning_rate * db/T.sqrt(mb + 1e-6)), 
        (c, c - learning_rate * dc/T.sqrt(mc + 1e-6)), 
        (self.mE, mE), 
        (self.mU, mU), 
        (self.mW, mW), 
        (self.mV, mV), 
        (self.mb, mb), 
        (self.mc, mc) 
]) 

有人可以告訴我,上面的代碼的作者是試圖做什麼?有一個值,[x, y, learning_rate, theano.Param(decay, default=0.9)]試圖更新,價值將會更新[]updates在這裏有什麼功能?

如果我能夠知道上述代碼中發生了什麼,我將不勝感激。

回答

2

updates的文件如下(摘自here)。

更新必須提供一個窗體(共享變量,新表達式)對的列表。它也可以是密鑰共享的字典 - 變量和值是新的表達式。無論哪種方式,這意味着「只要這個函數運行,它就會用相應表達式的結果替換每個共享變量的.value」。上面,我們的累加器用狀態和增量的和來替換狀態的值。

因此,當您用所需的輸入調用上述theano函數時,它將更新共享變量的值,即E, U, W, V, b, c, ..., self.mc。要更新的新值由元組中的第二個數量給出。基本上,E = E - learning_rate * dE/T.sqrt(mE + 1e-6)等等。