如果用优化器捕获梯度,它会计算两倍的梯度吗?

If one captures gradient with Optimizer, will it calculate twice the gradient?

我最近遇到了一些训练性能瓶颈。我总是在摘要中添加很多直方图。我想知道通过先计算梯度然后重新最小化损失是否会计算两倍的梯度。简化代码:

# layers
...
# optimizer
loss = tf.losses.mean_squared_error(labels=y_true, predictions=logits)
opt = AdamOptimizer(learning_rate)
# collect gradients
gradients = opt.compute_gradients(loss)
# train operation
train_op = opt.minimize(loss)
...
# merge summary
...

优化器中是否有直接使用梯度的最小化方法?像 opt.minimize(gradients) 而不是 opt.minimize(loss)?

您可以在使用 compute_gradients 计算梯度后使用 apply_gradients,如下所示:

grads_and_vars = opt.compute_gradients(loss)
train_op = opt.apply_gradients(grads_and_vars)