2017-05-06 14 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から取得)。

更新プログラムには、(shared-variable、new expression)という形式のペアのリストを指定する必要があります。また、キーが共有変数であり、値が新しい式である辞書でもあります。いずれにしても、この関数が実行されるたびに、各共有変数の.valueが対応する式の結果に置き換えられます。上の例では、アキュムレータは状態の値を状態とインクリメント量の合計で置き換えます。

したがって、上記のtheano関数を必要な入力で呼び出すと、共有変数の値、つまりE, U, W, V, b, c, ..., self.mcが更新されます。更新される新しい値は、タプルの2番目の量によって与えられます。基本的にE = E - learning_rate * dE/T.sqrt(mE + 1e-6)などです。

関連する問題