2017-05-28 34 views
13

tf.layersで定義されたレイヤーを使用する場合、L2正則化を追加できますか?高レベルのtf.layersを使用する場合にL2正規化を追加

tf.layersは高レベルのラッパーなので、フィルターの重みに簡単にアクセスする方法はありません。 tf.nn.conv2d

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1) 

weights = tf.get_variable(
    name="weights", 
    regularizer=regularizer 
) 

#Previous layers 

... 

#Second layer 
layer 2 = tf.nn.conv2d(
input, 
weights, 
[1,1,1,1], 
[1,1,1,1]) 

#More layers 
... 

#Loss 
loss = #some loss 

reg_variables = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 
reg_term = tf.contrib.layers.apply_regularization(regularizer, reg_variables) 
loss += reg_term 

は今、どのようなことがtf.layers.conv2d持つように見えるのでしょうか?

ありがとうございました!あなたの質問で答え

答えて

15

あなたはtf.layers.conv2d as arguments:

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1) 
layer2 = tf.layers.conv2d(
    inputs, 
    filters, 
    kernel_size, 
    kernel_regularizer=regularizer) 
+6

最後の損失層に正則化剤を追加する必要がありますか? 'loss_new = loss_old + regularizer'のように – Tom

+0

@TYL最後の損失層に追加しましたか? – thigi

+0

答えを少し拡大できますか? – thigi

4

にそれらを渡すことができませんか? tf.losses.get_regularization_loss(https://www.tensorflow.org/api_docs/python/tf/losses/get_regularization_loss)を使用すると、すべてのREGULARIZATION_LOSSESが収集されます。

... 
layer2 = tf.layers.conv2d(input, 
    filters, 
    kernel_size,       
    kernel_regularizer= tf.contrib.layers.l2_regularizer(scale=0.1)) 
... 
l2_loss = tf.losses.get_regularization_loss() 
loss += l2_loss 
関連する問題