在优化器期间保持变量不变
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])
您可以在它们之间迭代更新。
我有一个损失张量 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])
您可以在它们之间迭代更新。