在CNTK有多个输出层的情况下,一个训练应该有多个训练器吗?
List<Learner> learnersA = new List<Learner>() { Learner.SGDLearner(OutputLayerOne.Parameters(), learningRate) };
List<Learner> learnersB = new List<Learner>() { Learner.SGDLearner(OutputLayerTwo.Parameters(), learningRate) };
Trainer trainerA = Trainer.CreateTrainer(OutputLayerOne, loss, eval, learnersA);
Trainer trainerB = Trainer.CreateTrainer(OutputLayerTwo, loss, eval, learnersB);
或者,有没有更好的方法,和一位训练师一起训练多种功能?
发布于 2019-04-11 12:03:37
看起来你有两个损失函数。目前在优化领域中,仅存在优化单个损失函数的技术。对于多任务学习(即多个损失函数),您必须将它们组合起来形成单个损失。
示例:
loss1 = loss(output1, target1)
loss2 = loss(output2, target2)
final_loss = a * loss1 + (1-a) * loss2 # where `a` is the relative importance between the 2 loss.
你还应该确保两个损失具有相同的单位,否则将它们组合在一起是没有意义的。
https://stackoverflow.com/questions/55624071
复制相似问题