使用 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++ 中做同样的事情。
我正在尝试使用 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++ 中做同样的事情。