如何拦截TensorFlow中自动微分的梯度?

Len*_*oyt 4 tensorflow

假设我有两个后续层激活a1a2.有没有办法拦截自动微分从第2层传播到第1层的渐变,即?E/?a2?我想更改此渐变,然后将其传递给第1层.

Dom*_*ack 5

tf.train.Optimizer文档中,

在应用之前处理渐变.

调用minimize()会同时计算渐变并将它们应用于变量.如果要在应用渐变之前处理渐变,可以分三步使用优化器:

使用compute_gradients()计算渐变.根据需要处理渐变.使用apply_gradients()应用已处理的渐变.例:

# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)
Run Code Online (Sandbox Code Playgroud)