Python 如何在tensorflow中打印梯度的和值?

Python 如何在tensorflow中打印梯度的和值?,python,machine-learning,tensorflow,neural-network,deep-learning,Python,Machine Learning,Tensorflow,Neural Network,Deep Learning,这是我的模型的一部分,它是一个DNN,用于执行回归任务。 但我发现,经过几批处理后,模型的损失没有多大变化(批量大小为1000,整个数据为1100万)。 所以我想在每一步打印梯度和的值,这是每一批梯度的和。我如何修改我的代码来完成它 以下是如何在每个步骤上向添加渐变: self.logits = nn_layers.full_connect_(self.wide_deep_embed, config.num_classes, activation='None', use_bn = True,

这是我的模型的一部分,它是一个DNN,用于执行回归任务。 但我发现,经过几批处理后,模型的损失没有多大变化(批量大小为1000,整个数据为1100万)。
所以我想在每一步打印梯度和的值,这是每一批梯度的和。我如何修改我的代码来完成它

以下是如何在每个步骤上向添加渐变:

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
如果渐变太大,也可以报告总和:

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

但通常,您可以检测到消失的渐变,而无需求和:只需查看网络早期层的渐变即可。

以下是如何将渐变添加到每个步骤:

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
如果渐变太大,也可以报告总和:

# 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)
但通常你可以检测到消失的梯度,而不需要求和:只需查看网络早期层的梯度即可