如何在tensorflow中打印渐变的和值?

时间:2017-10-20 04:19:58

标签: python machine-learning tensorflow neural-network deep-learning

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万)。 所以我想在每一步中打印sum梯度的值,这是每批中渐变的总和。如何修改我的代码呢?

1 个答案:

答案 0 :(得分: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))

但通常你可以在不花费总和的情况下检测消失的渐变:只需看一下网络早期阶段的渐变。