在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);
还是有更好的方法,与可以进行多种功能训练的教练一起训练?
答案 0 :(得分:2)
似乎您有2个损失函数。当前在优化世界中,仅存在优化单个损失函数的技术。对于多任务学习(即不止一个损失函数),您将不得不将它们结合起来形成一个单一的损失。
示例:
private static async Task DoSomethingAsync(IEnumerable<object> objects)
{
await Task.Run(() =>
{
long sum = 0; for (int i = 0; i < 500000000; i++) sum += i;
}).ConfigureAwait(false);
}
您还应该确保2个损失具有相同的单位,否则将它们组合在一起是没有意义的。