Выходное значение с помощью Mxnet C ++ API

Я пытаюсь реализовать пользовательскую функцию потерь в 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 вычисление?

0

Решение

Нет API для доступа к промежуточным выводам в графе вычислений. Это по причинам оптимизации. Любой вывод, который вам нужен, должен быть возвращен как вывод графика. Вы можете использовать mx.symbol.Group для возврата нескольких символов в качестве вывода.

Вот это пример Python. Вы должны быть в состоянии сделать то же самое в C ++.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]