opt.apply_gradients()在TensorFlow中做了什么?

Len*_*oyt 21 tensorflow

文档对此并不十分清楚.我想通过opt.compute_gradients(E, [v])包含存储的张量的?E/?x = g(x)每个元素可以获得渐变.是否实质上执行,其中为学习率是多少?这意味着如果我想在变量中添加一个正的附加变化,我需要更改,例如:xvopt.apply_gradients(grads_and_vars)x ? -?·g(x)?pg(x) ? g(x) - (1/?)p

opt = tf.train.GradientDescentOptimizer(learning_rate=l)
grads_and_vars = opt.compute_gradients(loss, var_list)

for l, gv in enumerate(grads_and_vars):
    grads_and_vars[l] = (gv[0] - (1/l) * p, gv[1])

train_op = opt.apply_gradients(grads_and_vars)
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

lba*_*les 14

apply_gradients方法实际应用的更新规则取决于特定的优化程序.看看这里apply_gradientstf.train.Optimizer课程实现.它依赖于在方法和实现更新规则的派生类.您指的更新规则由.实现._apply_dense_apply_sparesGradientDescentOptimizer

关于你想要的积极添加剂更新:如果你所谓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)
Run Code Online (Sandbox Code Playgroud)

更优雅的方法是编写一个新的优化器(继承自tf.train.Optimizer)直接实现所需的更新规则.