mindspore.ops.SoftmaxCrossEntropyWithLogits
- class mindspore.ops.SoftmaxCrossEntropyWithLogits[源代码]
使用one-hot编码获取预测值和真实之间的softmax交叉熵。
SoftmaxCrossEntropyWithLogits算法的更新公式如下:
\[\begin{split}\begin{array}{ll} \\ p_{ij} = softmax(X_{ij}) = \frac{\exp(x_i)}{\sum_{j = 0}^{N-1}\exp(x_j)} \\ loss_{ij} = -\sum_j{Y_{ij} * ln(p_{ij})} \end{array}\end{split}\]其中 \(X\) 代表 logits 。 \(Y\) 代表 label 。 \(loss\) 代表 output 。
- 输入:
logits (Tensor) - 输入预测值,其shape为 \((N, C)\) ,数据类型为float16或float32。
labels (Tensor) - 输入真实值,其shape为 \((N, C)\) ,数据类型与 logits 的相同。
- 输出:
两个Tensor(loss, dlogits)组成的tuple, loss 的shape为 \((N,)\) , dlogits 的shape与 logits 的相同。
- 异常:
TypeError - logits 或 labels 的数据类型既不是float16也不是float32。
TypeError - logits 或 labels 不是Tensor。
ValueError - logits 的shape与 labels 的不同。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> logits = Tensor([[2, 4, 1, 4, 5], [2, 1, 2, 4, 3]], mindspore.float32) >>> labels = Tensor([[0, 0, 0, 0, 1], [0, 0, 0, 1, 0]], mindspore.float32) >>> softmax_cross = ops.SoftmaxCrossEntropyWithLogits() >>> loss, dlogits = softmax_cross(logits, labels) >>> print(loss) [0.5899297 0.52374405] >>> print(dlogits) [[ 0.02760027 0.20393994 0.01015357 0.20393994 -0.44563377] [ 0.08015892 0.02948882 0.08015892 -0.4077012 0.21789455]]