我想用两次失败训练神经网络。我将两个tf.train.Adamoptimizer()
定义为optim1
和optim2
,以优化两个损失loss1
和loss2
。
在我的网络中,部分图层(比如设置 S )会导致两种损失。现在,如果我需要使用两个优化器训练整个网络end2end。我可以简单地做吗
gradient_1 = tf.gradients(loss_1, vars_1)
train_op_1 = optim1.apply_gradients(zip(gradient_1, vars_1))
gradient_2 = tf.gradients(loss_2, vars_2)
train_op_2 = optim1.apply_gradients(zip(gradient_2, vars_2))
sess.run([train_op_1, train_op_2])
来自两个优化器的两个渐变是否属于 S 会自动累积吗?或者每次应用apply_gradients
时,渐变都将归零。如果是后者,我目前的实施是错误的。我可能需要将新的损失loss = loss1 + loss2
定义为https://github.com/jg8610/multi-task-part-1-notebook/blob/master/Multi-Task%20Learning%20Tensorflow%20Part%201.ipynb建议。
但是,如果我想分别对gradient_1 and gradient_2
执行更多操作,那么该解决方案就不是很灵活。
有什么好建议吗?谢谢!