1

J'ai implémenté un modèle CNN pour la classification numérique. Mon modèle est trop surfait, Afin de surmonter le surapprentissage, j'essaie d'utiliser L2 Regularization dans ma fonction de coût. J'ai une petite confusion comment puis-je sélectionner <weights> pour mettre dans l'équation de coût (dernière ligne du code).Comment implémenter la fonction de coût régulé L2 pour le réseau de neurones convolutif

... 

x = tf.placeholder(tf.float32, shape=[None, img_size, img_size, num_channels], name='x') # Input 
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true') # Labels 

<Convolution Layer 1> 

<Convolution Layer 2> 

<Convolution Layer 3> 

<Fully Coonected 1> 

<Fully Coonected 2> O/P = layer_fc2 

# Loss Function 
lambda = 0.01 
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2, labels=y_true) 
# cost  = tf.reduce_mean(cross_entropy) # Nornmal Loss 
cost   = tf.reduce_mean(cross_entropy + lambda * tf.nn.l2_loss(<weights>)) # Regularized Loss 

... 

Répondre

2

Vous devez définir la perte L2 par rapport aux poids - utiliser trainable_variables pour que:

C = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2, labels=y_true) 
l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()]) 
C = C + lambda * l2_loss