2016-04-12 8 views

risposta

16

È possibile aggiungere tutte le variabili a cui si desidera aggiungere il decadimento del peso, a un nome di raccolta 'variabili' e quindi calcolare il decadimento del peso della norma L2 per l'intera raccolta.

# Create your variables 
    weights = tf.get_variable('weights', collections=['variables']) 

    with tf.variable_scope('weights_norm') as scope: 
    weights_norm = tf.reduce_sum(
     input_tensor = WEIGHT_DECAY_FACTOR*tf.pack(
      [tf.nn.l2_loss(i) for i in tf.get_collection('weights')] 
    ), 
     name='weights_norm' 
) 

    # Add the weight decay loss to another collection called losses 
    tf.add_to_collection('losses', weights_norm) 

    # Add the other loss components to the collection losses  
    # ... 

    # To calculate your total loss 
    tf.add_n(tf.get_collection('losses'), name='total_loss') 
+0

È questo il peso decadimento equivalente al decadimento peso di alexnet? – LKM

+2

Nota, iniziando con tensorflow v1.0 'tf.pack' nella riga 6 dell'esempio è stato rinominato in' tf.stack'. – Chrigi

+0

dovrebbe essere 'tf.get_collection ('variables')' invece di 'tf.get_collection ('weights')' –

3
get_variable(
name, 
shape=None, 
dtype=None, 
initializer=None, 
regularizer=None, 
trainable=True, 
collections=None, 
caching_device=None, 
partitioner=None, 
validate_shape=True, 
use_resource=None, 
custom_getter=None) 

Questo è l'utilizzo di tensorflow funzione get_variable. Puoi facilmente specificare il regolarizzatore per fare la decomposizione del peso.

seguente è un esempio:

weight_decay = tf.constant(0.0005, dtype=tf.float32) # your weight decay rate, must be a scalar tensor. 
W = tf.get_variable(name='weight', shape=[4, 4, 256, 512], regularizer=tf.contrib.layers.l2_regularizer(weight_decay)) 
Problemi correlati