使用 Mxnet C++ 的输出值 API

Output value with Mxnet C++ API

我正在尝试使用 Mxnet 的 C++ API 在 Mxnet 中实现自定义损失函数。损失函数的问题已经在 python () 中提出,即使它没有解决输出的具体问题。

假设我想创建自己的 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计算的结果?

没有 API 可以访问计算图中的中间输出。这是出于优化原因。您需要的任何输出都必须 returned 作为图形的输出。您可以使用 mx.symbol.Group 到 return 多个符号作为输出。

Here 是一个 Python 示例。你应该能够在 C++ 中做同样的事情。