2017-01-24 6 views
2

次へTensorflow LSTM Regularization LSTM細胞のパラメータを訓練するときに、コスト関数に正規化項を追加しようとしています。私が持っているいくつかの定数さておきTensorFlow:LSTMに正則化を追加

def RegularizationCost(trainable_variables): 
    cost = 0 
    for v in trainable_variables: 
     cost += r(tf.reduce_sum(tf.pow(r(v.name),2))) 
    return cost 

... 

regularization_cost = tf.placeholder(tf.float32, shape =()) 
cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost 
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost) 

... 

tv = tf.trainable_variables() 
s = tf.Session() 
r = s.run 

... 

while (...): 
    ... 

    reg_cost = RegularizationCost(tv) 
    r(optimizer, feed_dict = {x: x_b, y: y_b, regularization_cost: reg_cost}) 

を私が持っている問題は、正則化項を追加することが非常学習プロセスを遅くし、用語が関連付けられたときに実際に正則化項reg_costが目に見えて反復ごとに増加していることですpred - yかなり停滞している、つまりreg_costは考慮されていないようです。

私はこの用語を完全に間違った方法で追加していると思います。私はコスト関数自体にこの項を追加する方法を知らなかったので、スカラーtf.placeholderで回避策を使用し、正規化コストを「手動で」計算しました。どのようにそれを正しく行うには?

答えて

2

は一度だけL2の損失を計算する:

tv = tf.trainable_variables() 
regularization_cost = tf.reduce_sum([ tf.nn.l2_loss(v) for v in tv ]) 
cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost 
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost) 

あなたは正則化すべきではないものとbiasある変数を削除したい場合があります。

0

コードがすべての繰り返しで新しいノードを作成するので、速度が遅くなります。これはあなたがTFでコードする方法ではありません。まず、正規化項を含むグラフ全体を作成し、whileループではそれらを実行します。それぞれの "tf.XXX"演算は、の新しいノードを作成します。

関連する問題