我正在尝试在Tensorflow中实现无衍生学习算法。因此,学习算法不使用反向传播,例如讨论here。
据我了解,默认的Optimizers都实现了反向传播。 我可以像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)
但我没有看到实现不依赖反向投影的学习算法的方法。另外,我想使用的论坛不需要衍生物,所以我认为根本不需要计算梯度?</ p>
有没有办法修改/创建一个优化器,使用另一种方式而不是反向传播来调整权重?
答案 0 :(得分:1)
虽然到目前为止我还没有实现自己的优化器,但我仔细检查了TensorFlow架构,因为我正在为它编写一个Wrapper。
据我了解,您可以通过扩展tf.train.Optimizer类来实现自己的优化器(就像当前在TensorFlow中实现的所有其他优化器一样)。
随便说来,TensorFlow中的优化器由Python(或任何其他客户端语言)和C ++部分组成。后者实现核心功能,即TensorFlow图中的Ops,如训练Ops定义的here。
优化器的Python部分将Ops添加到图形定义中。它提供了传递给Ops的参数,并对优化器进行了一些高级管理。
所以我建议你试试这个:
编写自己的基本优化器类实现。
要实施公式,您必须定义一个Op,如Adding an Op Documentation中所述。