修改TensorFlow反向通道中的梯度

修改TensorFlow反向通道中的梯度,tensorflow,Tensorflow,我正在尝试用自定义渐变修改TensorFlow中所有层的渐变,并保存当前渐变。从概念上讲,第i次迭代中单个层的计算过程如下所示: 原始梯度=(由TF计算的实际梯度) custom_grad=f(原始_grad,存储_grad[i-1]) storaged_grad[i]=原始_grad 使用custom_grad更新层权重 我对TF非常陌生,所以对于如何/是否能够实现这一点,我非常困惑。为了回答您的问题,我们必须看看优化器在您调用优化器时通常做些什么。最小化(损失) 实际上,它们正在执行两个后续

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

  • 原始梯度=(由TF计算的实际梯度)
  • custom_grad=f(原始_grad,存储_grad[i-1])
  • storaged_grad[i]=原始_grad
  • 使用
    custom_grad
    更新层权重

  • 我对TF非常陌生,所以对于如何/是否能够实现这一点,我非常困惑。

    为了回答您的问题,我们必须看看优化器在您调用
    优化器时通常做些什么。最小化(损失)

    实际上,它们正在执行两个后续操作:
    compute\u gradients()
    apply\u gradients

    我们从中读到:

    调用
    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)
    
    #创建一个优化器。
    opt=梯度下降优化(学习率=0.1)
    #计算变量列表的梯度。
    梯度和变量=选择计算梯度(损失)
    #grads_和_vars是元组列表(梯度、变量)。你做什么就做什么
    #需要添加“渐变”部分,例如封盖等。
    有上限的年级和变量=[(我的上限(gv[0]),gv[1]),适用于年级和变量中的gv]
    #请优化器应用带封顶的渐变。
    选择应用梯度(上限梯度和变量)