文档对此并不十分清楚.我想通过opt.compute_gradients(E, [v])
包含存储的张量的?E/?x = g(x)
每个元素可以获得渐变.是否实质上执行,其中为学习率是多少?这意味着如果我想在变量中添加一个正的附加变化,我需要更改,例如:x
v
opt.apply_gradients(grads_and_vars)
x ? -?·g(x)
?
p
g(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_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)
Run Code Online (Sandbox Code Playgroud)
更优雅的方法是编写一个新的优化器(继承自tf.train.Optimizer
)直接实现所需的更新规则.
归档时间: |
|
查看次数: |
19946 次 |
最近记录: |