Выходное значение с помощью Mxnet C ++ API - PullRequest
0 голосов
/ 26 июня 2018

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

1 Ответ

0 голосов
/ 28 июня 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...