2017-05-28 21 views
13

tf.layers'da tanımlanan katmanları kullanırken L2 normalleştirmesi eklemek mümkün mü?Yüksek seviye tf.layers kullanırken L2 normalleştirmesi ekle

Bana göre, tf.layers yüksek düzeyde bir sarmalayıcı olduğundan, filtre ağırlıklarına erişmenin kolay bir yolu yoktur. tf.nn.conv2d Şimdi

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 

o tf.layers.conv2d ile nasıl bir şey olurdu ile

?

Teşekkürler! Sorunuzun içinde cevabı

cevap

15

Sen 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

Son zarar katmanına ekolayzer eklemem gerekir mi? 'Loss_new = loss_old + regularizer' – Tom

+0

@TYL'yi son zarar katmanına eklediniz mi, eklemediniz mi? – thigi

+0

Cevabınızı biraz genişletebilir misiniz? – thigi

4

içine geçebilir değil midir? Ayrıca tüm REGULARIZATION_LOSSES toplanacak tf.losses.get_regularization_loss (https://www.tensorflow.org/api_docs/python/tf/losses/get_regularization_loss) 'u kullanabilirsiniz.

... 
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 
İlgili konular