CNTK多种输出培训师

时间:2019-04-11 03:04:06

标签: c# cntk

在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);

还是有更好的方法,与可以进行多种功能训练的教练一起训练?

1 个答案:

答案 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个损失具有相同的单位,否则将它们组合在一起是没有意义的。