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 

这是我的模型的一部分,这是一个DNN做回归任务。 但是我发现模型的损失在多批次后没有变化(批量大小为1000,整个数据为1100万)。 所以我想在每一步打印和梯度的值,这是每批中梯度的总和。我怎样才能修改我的代码来做到这一点?如何打印tensorflow中的梯度和值?

回答

0

这里是你如何能梯度增加tensorboard summary每一步:

# 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) 

如果梯度太大,你可以报告的总和,以及:

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

但通常可以检测消失渐变而不用总结:只需查看网络早期阶段的渐变。

相关问题