在优化器期间保持变量不变

Holding variables constant during optimizer

我有一个损失张量 L 的 TensorFlow 计算图,它取决于 2 tf.Variables、A 和 B。

我想 运行 在变量 A 上进行梯度上升(A+=L 相对于 A 的梯度),同时保持 B 固定,反之亦然 - 运行 在 B 上进行梯度上升(B+ = L wrt B) 的梯度,同时保持 A 固定。我该怎么做?

tf.stop_gradient(tensor) 可能就是您要找的。出于梯度计算的目的,张量将被视为常数。您可以创建两个损失,将不同的部分视为常量。

另一种选择(通常更好)是创建 2 个优化器,但只显式优化变量的子集,例如

train_a = tf.train.GradientDescentOptimizer(0.1).minimize(loss_a, var_list=[A])
train_b = tf.train.GradientDescentOptimizer(0.1).minimize(loss_b, var_list=[B])

您可以在它们之间迭代更新。