TensorFlowのLSTMでl1またはl2の正則化をどのように実装できるのでしょうか? TFはLSTMの内部の重みにアクセスすることはできないので、どのようにして規範を計算して損失に加えるかはわかりません。私の損失機能は今のところRMSに過ぎません。Tensorflow LSTM Regularization
答えはhereで十分ではありません。
TensorFlowのLSTMでl1またはl2の正則化をどのように実装できるのでしょうか? TFはLSTMの内部の重みにアクセスすることはできないので、どのようにして規範を計算して損失に加えるかはわかりません。私の損失機能は今のところRMSに過ぎません。Tensorflow LSTM Regularization
答えはhereで十分ではありません。
あなたが言ったリンクの回答が正しい方法です。 tf.trainable_variables
を繰り返し、LSTMに関連する変数を見つけます。
LSTMのvariable_scopeを再入力し、reuse_variables = Trueに設定し、get_variable()を呼び出すことで、より複雑で恐らくより脆弱な方法があります。しかし、実際には、元のソリューションは速く、脆弱ではありません。
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から勾配を計算します