文檔對此不太清楚。我想通過opt.compute_gradients(E, [v])
可以獲得的梯度包含∂E/∂x = g(x)
,對於v
存儲的張量的每個元素x
。 opt.apply_gradients(grads_and_vars)
本質上是執行x ← -η·g(x)
,其中η
是學習率?這意味着如果我想爲變量添加一個正的附加變量p
,我需要更改g(x) ← g(x) - (1/η)p
,例如,像這樣:什麼是opt.apply_gradients()在TensorFlow中做什麼?
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)
有沒有更好的方法來做到這一點?
對不起,我在您提供的代碼片段中忽略了'opt = tf.train.GradientDescentOptimizer(learning_rate = l)'這一行,這使我的答案的第一段無關緊要。儘管如此,仍然將它留在上下文中。 – lballes
謝謝。其他梯度優化器可以計算例如基於我更新的漸變的動畫,或者爲什麼它們與這種方法不兼容? –
其他優化器實現更新規則,如動量梯度下降,AdaGrad等。當然,爲更新步驟添加一個常量值與任何更新規則都是兼容的(它是一個單獨的問題有多明智)。 – lballes