Я пытаюсь реализовать пользовательскую функцию потерь в Mxnet, используя ее C ++ API. Вопрос о функции потерь уже возник в Python ( как использовать настраиваемую функцию потерь с mxnet? ), даже если она не решает конкретный вопрос о выводе.
Допустим, я хочу создать свою собственную функцию softmax, я мог бы сделать следующее:
Symbol expFc2 = exp(fc2);
Symbol sumExp = sum("sumExp", expFc2, dmlc::optional<Shape>(Shape(1)));
Symbol expandedSumExp = expand_dims("expandedSumExp", sumExp, 1);
Symbol customSoftmax = broadcast_div(expFc2, expandedSumExp);
Symbol cross_entropy = (-1) * (one_hot("OneHotDataLabel", data_label, 10) * log(customSoftmax) + (1 - one_hot("OneHotDataLabel", data_label, 10)) * log(1 - customSoftmax));
Symbol lenet = MakeLoss(cross_entropy);
Однако всякий раз, когда я получаю вывод, auto curOutput = exe->outputs;
, я, кажется, получаю значение после вычисления функции потерь, которое будет cross_entropy
.
Как получить результат вычисления customSoftmax
?