opt.apply_gradients()在TensorFlow中做什么?
tensorflow
5
0

该文档对此不太清楚。我想一个可以通过opt.compute_gradients(E, [v])获得的梯度包含v存储的张量的每个元素xopt.compute_gradients(E, [v]) ∂E/∂x = g(x)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)

有一个更好的方法吗?

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

apply_gradients方法实际应用的更新规则取决于特定的优化器。在这里看一下tf.train.Optimizer类中apply_gradients的实现。它依赖于在_apply_dense_apply_spares方法中实现更新规则的派生类。您要引用的更新规则是由GradientDescentOptimizer实现的。

关于所需的积极的增值更新:如果您所谓的optGradientDescentOptimizer的实例化,那么您确实可以通过以下方式实现您想做的事情

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 ),该优化器直接实现所需的更新规则。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号