我想在tensorflow中实现一个多任务学习框架。我目前正在实现类似这样的东西(伪代码)
define_reg_cost()
define_clas_cost()
reg_optimizer.(reg_learning_rate).min(reg_cost)
clas_optimizer.(clas_learning_rate).min(clas_cost)
for num_iterations:
reg_optimizer.run()
clas_optimizer.run()
这对我来说似乎不是正确的方法。 我有两个损失函数,我想学习权重,以便在同一优化器中以不同的学习速率最小化损失。 我基本上希望渐变优化器能够做这样的更新:
weight_updated = weight - learning_rate_1 * d(loss1)/ dw - learning_rate_2 * d(loss2)/ dw
有关如何执行此操作的任何提示(可能使用optimizer.apply_gradients())?
答案 0 :(得分:0)
后但对其他人可能有帮助: 您显示的解决方案将是正确的解决方案。
如果您查看以下内容:this post和: this stack overflow answer
如果您使用的是GradientDescentOptimizer之类的东西,这些 操作非常相似。那是因为采取梯度是 线性运算,总和的梯度与的总和相同 渐变。
但是,ADAM做一些特殊的事情:不管您的规模如何 损耗,它会缩放渐变,以使渐变始终处于 您的学习率。如果您将损失乘以1000,就不会 影响ADAM,因为更改将被归一化。
使用两个不同的优化器有很多优点。
您还可以在渐变计算中拆分更新,然后将lerningrate直接应用到渐变的不同部分。 see here