在TensorFlow中实现梯度下降,而不是使用随附的梯度下降

pre*_*ath 5 gradient-descent tensorflow

我想在TensorFlow中构建分类器时使用具有动量的梯度下降(跟踪先前的渐变).

所以我不想使用tensorflow.train.GradientDescentOptimizer但我想用来tensorflow.gradients计算渐变并跟踪以前的渐变并根据所有这些来更新权重.

我如何在TensorFlow中执行此操作?

kev*_*man 6

TensorFlow具有动量梯度下降的实现.

为了回答关于实现自己的优化算法的一般问题,TensorFlow为您提供了计算梯度的基元,并使用计算的梯度更新变量.在你的模型中,假设loss指定了损失函数,并且var_list是模型中TensorFlow变量的python列表(可以通过调用获得,tf.all_variables或者tf.trainable_variables你可以通过以下方式计算变量的渐变:

grads = tf.gradients(loss, var_list)
Run Code Online (Sandbox Code Playgroud)

对于简单的梯度下降,您只需从变量中减去梯度和学习速率的乘积.该代码如下所示:

var_updates = []
for grad, var in zip(grads, var_list):
  var_updates.append(var.assign_sub(learning_rate * grad))
train_op = tf.group(*var_updates)
Run Code Online (Sandbox Code Playgroud)

您可以通过致电训练您的模型sess.run(train_op).现在,您可以在实际更新变量之前执行各种操作.例如,您可以跟踪不同变量集中的渐变,并将其用于动量算法.或者,您可以在更新变量之前剪切渐变.所有这些都是简单的TensorFlow操作,因为渐变张量与您在TensorFlow中计算的其他张量没有区别.请查看一些更高级的优化算法的实现(Momentum,RMSProp,Adam),以了解如何实现自己的优化算法.