2016-05-16 15 views
3

私は現在、Lasagne/Theanoを使用してリカレントニューラルネットに取り組んでいます。Lasagne/Theano勾配値

トレーニング中、更新はTheanoの記号勾配を使用して計算されます。

grads = theano.grad(loss_or_grads, params) 

勾配表現は、一般的には完全に罰金ですが、私はまた、トレーニングを監視するために勾配に興味があります。

私の質問は、これまで見つからなかったグラデーション値を取得するための組み込みメソッドがある場合、または自分で行う必要がある場合です。

おかげで、事前

答えて

5

に私は、勾配を評価するための任意のラザニア機能を認識していないんだけど、あなたは、単純なtheano機能でそれを自分で取得することができます。

は、我々は以下theano変数を持っていると言う:

  • inputs =ネットワークへの入力の関数として定義されているネットワーク損失関数の
  • loss =値の
  • targets =目標出力、ネットワーク出力およびtargets
  • l_hid =ネットワークの反復レイヤー、タイプlasagne.layers.RecurrentLayer

ここで、損失関数w.r.tの勾配に興味があるとしましょう。再発性重みは:

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

だけ入力およびターゲットの任意の値(例えば、現在のminibatch)ためget_gradを呼び出し、次に勾配

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

ための数値を取得するtheano関数を定義します。 get_grad()は、weano共有変数として格納されているため、重みの値を渡す必要はありません。