在TensorFlow向后传递中修改渐变

时间:2017-09-08 23:44:24

标签: tensorflow

我正在尝试使用自定义渐变修改TensorFlow中所有图层的渐变,并保存当前渐变。从概念上讲, i -th迭代中单个层的计算过程如下:

  1. custom_grad = f(original_grad, stored_grad[i - 1])
  2. stored_grad[i] = original_grad
  3. custom_grad
  4. 使用$data = json_decode(file_get_contents("php://input",true)); 更新图层权重
  5. 我对TF很陌生,因此很难完成如何实现这一目标。

1 个答案:

答案 0 :(得分:2)

要回答您的问题,我们必须查看优化程序在您致电optimizer.minimize(loss)时通常会采取的措施。

实际上他们正在执行两项后续操作:compute_gradients()apply_gradients

documentation开始,我们读到:

  

调用minimize()负责计算渐变并将它们应用于变量。

所以:

  

如果要处理渐变   在应用它们之前,您可以分三步使用优化器:

     
      
  1. 使用compute_gradients()计算渐变。
  2.   
  3. 根据需要处理渐变。
  4.   
  5. 使用apply_gradients()
  6. 应用已处理的渐变   

直接从文档中我可以举例说明对渐变应用一些修改:

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