apply_gradients
方法实际应用的更新规则取决于特定的优化器。在这里看一下tf.train.Optimizer
类中apply_gradients
的实现。它依赖于在_apply_dense
和_apply_spares
方法中实现更新规则的派生类。您要引用的更新规则是由GradientDescentOptimizer
实现的。
关于所需的积极的增值更新:如果您所谓的opt
是GradientDescentOptimizer
的实例化,那么您确实可以通过以下方式实现您想做的事情
grads_and_vars = opt.compute_gradients(E, [v])
eta = opt._learning_rate
my_grads_and_vars = [(g-(1/eta)*p, v) for g, v in grads_and_vars]
opt.apply_gradients(my_grads_and_vars)
执行此操作的更优雅的方法可能是编写一个新的优化器(继承自tf.train.Optimizer
),该优化器直接实现所需的更新规则。
0
该文档对此不太清楚。我想一个可以通过
opt.compute_gradients(E, [v])
获得的梯度包含v
存储的张量的每个元素x
的opt.compute_gradients(E, [v])
∂E/∂x = g(x)
。opt.apply_gradients(grads_and_vars)
是否实际上执行x ← -η·g(x)
,其中η
是学习率?这意味着如果我想为变量添加正的加性变化p
,则需要更改g(x) ← g(x) - (1/η)p
,例如:有一个更好的方法吗?