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