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相同。然而,当 logitslabels 的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.]]