1
self.logits = nn_layers.full_connect_(self.wide_deep_embed, config.num_classes, activation='None', use_bn = True, \ 
             keep_prob=self.keep_prob, name='output_layer') # predict prob 
## loss and optim 
#self.loss = nn_layers.cross_entropy_loss_with_reg(self.labels, self.logits) 
self.loss = tf.losses.mean_squared_error(self.labels, self.logits) 
tf.summary.scalar('loss', self.loss) 

if not opt: 
    optim = nn_layers.get_optimizer(config.optimizer, learning_rate=self.learning_rate) 
else: 
    optim = opt 
self.train_op = optim.minimize(self.loss, global_step=self.global_step) 

## score & infers 
self.infers = self.logits # predict label 

Voici une partie de mon modèle qui est un DNN pour faire une tâche de régression. Mais je trouve que la perte du modèle n'a pas beaucoup changé après plusieurs lots (la taille du lot est de 1000 et l'ensemble des données est de 11 millions). Je veux donc imprimer la valeur du gradient de somme à chaque pas, qui est la somme des gradients dans chaque lot. Comment puis-je modifier mon code pour le faire?Comment imprimer la valeur de somme de gradient dans tensorflow?

Répondre

0

Voilà comment vous pouvez ajouter les gradients à tensorboard summary sur chaque étape:

# All gradients of loss function wrt trainable variables 
grads = tf.gradients(self.loss, tf.trainable_variables()) 
# Summarize all gradients 
for grad, var in list(zip(grads, tf.trainable_variables())): 
    tf.summary.histogram(var.name + '/gradient', grad) 

Si les gradients sont trop gros, vous pouvez rapporter la somme ainsi:

for grad, var in list(zip(grads, tf.trainable_variables())): 
    tf.summary.histogram(var.name + '/gradient_sum', tf.reduce_sum(grad)) 

Mais habituellement, vous pouvez détecter les gradients disparus sans prendre une somme: jetez simplement un coup d'oeil aux gradients aux premières couches de votre réseau.