mindspore.nn.MSELoss

查看源文件
class mindspore.nn.MSELoss(reduction='mean')[源代码]

用于计算预测值与标签值之间的均方误差。

假设 xy 为一维Tensor,长度 N ,则计算 xy 的unreduced loss(即reduction参数设置为”none”)的公式如下:

(x,y)=L={l1,,lN},withln=(xnyn)2.

其中, N 为batch size。如果 reduction 不是”none”,则:

(x,y)={mean(L),if reduction='mean';sum(L),if reduction='sum'.
参数:
  • reduction (str,可选) - 指定应用于输出结果的规约计算方式,可选 "none""mean""sum" ,默认值: "mean"

    • "none":不应用规约方法。

    • "mean":计算输出元素的平均值。

    • "sum":计算输出元素的总和。

输入:
  • logits (Tensor) - 输入预测值,任意维度的Tensor。

  • labels (Tensor) - 输入标签,任意维度的Tensor,在通常情况下与 logits 的shape相同。但是如果 logitslabels 的shape不同,需要保证他们之间可以互相广播。

输出:

Tensor,为float类型的loss,如果 reduction 为”mean”或”sum”,则shape为0; 如果 reduction 为”none”,则输出的shape为输入Tensor广播后的shape。

异常:
  • ValueError - reduction 不为 "mean""sum""none"

  • ValueError - logitslabels 的shape不同,且不能广播。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> from mindspore import Tensor, nn
>>> import numpy as np
>>> # Case 1: logits.shape = labels.shape = (3,)
>>> loss = nn.MSELoss()
>>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32)
>>> labels = Tensor(np.array([1, 1, 1]), mindspore.float32)
>>> output = loss(logits, labels)
>>> print(output)
1.6666667
>>> # Case 2: logits.shape = (3,), labels.shape = (2, 3)
>>> loss = nn.MSELoss(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. 4.]
 [0. 0. 1.]]