2016-12-12 19 views
0

私の損失関数にL1正規化とL2正規化の両方を追加したいと思います。私が重み変数を定義するとき、私は使用する正則化を選択しますが、私は1つしか選択できないようです。正規化損失Tensorflow - TRAINABLE_VARIABLESをテンソル配列

regLosses=tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 
loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y_conv,y_))+regLosses 

私はそれが動作しない

weights=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) 
l1Loss=tf.reduce_sum(tf.abs(weights)) 
l2Loss=tf.nn.l2loss(weights) 
loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y_conv,y_))+.1*l1Loss+.001*l2Loss 

して手動での損失を取得しよう - 私は思うTRAINABLE_VARIABLESは変数ではないパラメータを返すため。どのように私はこれを修正するのですか?私のマニュアルによるl1損失の計算は正しいですか?

ありがとうございます。

+0

tf.trainable_variables()の変数ごとにforループを試してみてください。個々のL2損失を合計して損失に加えてみてください。 –

答えて

0

私は答えを見つけたと思います。コメントとレビューを歓迎します。

私は、私が使用してウェイトを作成します。 W=tf.get_variable(name=name,shape=shape,regularizer=tf.contrib.layers.l1_regularizer(1.0))

は、L1正則化は、単に重みの絶対値の和であり、そのL2は重みの二乗で、その後、私は次の操作を行うことができますことに注目。

regLosses=tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 
l1=tf.reduce_sum(tf.abs(regLosses)) 
l2=tf.reduce_sum(tf.square(reglosses)) 
関連する問題