mindspore.nn.MAELoss
- class mindspore.nn.MAELoss(reduction='mean')[源代码]
衡量 \(x\) 和 \(y\) 之间的平均绝对误差。其中 \(x\) 是输入 logits ,\(y\) 是标签 labels 。
简单来说,假设 \(x\) 和 \(y\) 是两个长度为 \(N\) 的1D Tensor。未归约前的(参数 reduction 是
'none'
)损失为:\[\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad \text{with } l_n = \left| x_n - y_n \right|\]N 是批次(batch)个数。
如果 reduction 不是
'none'
,则:\[\begin{split}\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{'mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{'sum'.} \end{cases}\end{split}\]- 参数:
reduction (str, 可选) - 对输出使用归约算法:
'none'
、'mean'
、'sum'
。 默认值:'mean'
。'none'
: 不使用规约算法。'mean'
: 计算输出的平均值。'sum'
: 计算输出中所有元素的和。
- 输入:
logits (Tensor) - Tensor的shape是 \((M, *)\),其中, \(*\) 的含义是任意额外的维度。
labels (Tensor) - Tensor的shape是 \((N, *)\),通常和 logits 的shape相同。然而,当 logits 和 labels 的shape不同时,它们需要支持广播。
- 输出:
Tensor,加权损失,dtype是float,如果 reduction 是
'mean'
或'sum'
,shape则为0,否则当 reduction 是'none'
时,shape是广播之后的shape。- 异常:
ValueError - 如果 reduction 不是
'none'
,'mean'
,'sum'
中的一个。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> from mindspore import Tensor, nn >>> import numpy as np >>> # Case 1: logits.shape = labels.shape = (3,) >>> loss = nn.MAELoss() >>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32) >>> labels = Tensor(np.array([1, 2, 2]), mindspore.float32) >>> output = loss(logits, labels) >>> print(output) 0.33333334 >>> # Case 2: logits.shape = (3,), labels.shape = (2, 3) >>> loss = nn.MAELoss(reduction='none') >>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32) >>> labels = Tensor(np.array([[1, 1, 1], [1, 2, 2]]), mindspore.float32) >>> output = loss(logits, labels) >>> print(output) [[0. 1. 2.] [0. 0. 1.]]