我在一张图中有两个模型, 我需要交替训练这两个模型。
损失函数如下:
loss = f(theta_a) * g(theta_b)
with tf.variable_scope(tf.get_variable_scope(), reuse=tf.AUTO_REUSE):
A_train_op = models[model_idx_A].optimize(loss)
一次我只想优化theta_a
,而又将theta_b
固定下来,而另一次我想优化theta_b
,而将theta_a
固定下来。
我该怎么做?
g(theta_b)
可以转换为无法派生的某种类型吗?
答案 0 :(得分:0)
优化器的minimize
方法具有一个名为var_list
的可选参数,该参数接受一个或多个变量以在训练期间进行优化。因此,您只能使用以下代码训练theta_a
:
optimizer = tf.train.GradientDescentOptimizer(learn_rate).minimize(loss, var_list=[theta_a])
另一种方法是更新当前图形的TRAINABLE_VARIABLES
容器。