Tensorflow中的无导数学习算法

时间:2018-01-24 12:54:34

标签: python tensorflow

我正在尝试在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>

有没有办法修改/创建一个优化器,使用另一种方式而不是反向传播来调整权重?

1 个答案:

答案 0 :(得分:1)

虽然到目前为止我还没有实现自己的优化器,但我仔细检查了TensorFlow架构,因为我正在为它编写一个Wrapper。

据我了解,您可以通过扩展tf.train.Optimizer类来实现自己的优化器(就像当前在TensorFlow中实现的所有其他优化器一样)。

随便说来,TensorFlow中的优化器由Python(或任何其他客户端语言)和C ++部分组成。后者实现核心功能,即TensorFlow图中的Ops,如训练Ops定义的here

优化器的Python部分将Ops添加到图形定义中。它提供了传递给Ops的参数,并对优化器进行了一些高级管理。

所以我建议你试试这个:

  1. 编写自己的基本优化器类实现。

  2. 要实施公式,您必须定义一个Op,如Adding an Op Documentation中所述。