我正在尝试在Tensorflow中实现一个无导数学习算法。因此,一个不使用反向传播的学习算法,例如讨论了here。在
据我所知,默认的优化器都实现反向传播。
我可以按照here所述操作渐变值:
# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)
# grads_and_vars is a list of tuples (gradient, variable). Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)
但我不认为有一种方法可以实现不依赖于回溯的学习算法。另外,我要使用的forumla不需要导数,所以我认为根本没有必要计算梯度?在
有没有方法可以修改/创建一个优化器来使用反向传播之外的另一种方法来调整权重?在
Tags:
andofthe方法算法forherevarslist导数optgvcappedgradsgradients1条回答网友
1楼 ·
发布于 2023-03-07 00:10:48
虽然到目前为止我还没有实现我自己的优化器,但是我仔细研究了TensorFlow架构,因为我目前正在为它编写一个包装器。在
据我所知,您可以通过扩展tf.train.Optimizer类来实现自己的优化器(就像当前在TensorFlow中实现的所有其他优化器一样)。在
随便讲,TysFooad中的优化器由Python(或任何其他客户端语言)和C++部分组成。后者实现了核心功能,即张量流图中的操作,如定义的训练操作here。在
优化器的Python部分将Ops添加到图形定义中。它提供传递给Ops的参数,并对优化器进行一些高级管理。在
所以我建议你试试:
-
编写您自己的基优化器类的实现。
-
要实现您的公式,您必须定义一个Op,如Adding an Op Documentation中所述。