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梯度的值,这是每批中渐变的总和。如何修改我的代码呢?
答案 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))
但通常你可以在不花费总和的情况下检测消失的渐变:只需看一下网络早期阶段的渐变。