文档对此并不十分清楚.我想通过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_gradients的tf.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)直接实现所需的更新规则.
| 归档时间: |
|
| 查看次数: |
19946 次 |
| 最近记录: |