2016-06-16 12 views
0

TensorFlowのLSTMでl1またはl2の正則化をどのように実装できるのでしょうか? TFはLSTMの内部の重みにアクセスすることはできないので、どのようにして規範を計算して損失に加えるかはわかりません。私の損失機能は今のところRMSに過ぎません。Tensorflow LSTM Regularization

答えはhereで十分ではありません。

答えて

1

あなたが言ったリンクの回答が正しい方法です。 tf.trainable_variablesを繰り返し、LSTMに関連する変数を見つけます。

LSTMのvariable_scopeを再入力し、reuse_variables = Trueに設定し、get_variable()を呼び出すことで、より複雑で恐らくより脆弱な方法があります。しかし、実際には、元のソリューションは速く、脆弱ではありません。

0

TL; DR; Lを追加)リスト内のすべてのパラメータを保存し、あなたが推論

net = [v for v in tf.trainable_variables()] 
return *, net 

2を定義する機能では、最適化

1)のために勾配を行う前に、目的関数に自分のL^n個の規範を追加コストの^ n個の規範とあなたが

_ = sess.run(optimiser, feed_dict={input_var: data}) 
経由たいときオプティマイザを実行します)コスト

weight_reg = tf.add_n([0.001 * tf.nn.l2_loss(var) for var in net]) #L2 

cost = Your original objective w/o regulariser + weight_reg 

param_gradients = tf.gradients(cost, net) 

optimiser = tf.train.AdamOptimizer(0.001).apply_gradients(zip(param_gradients, net)) 

3から勾配を計算します

関連する問題