mindspore.nn.LossBase

class mindspore.nn.LossBase(reduction='mean')[源代码]

损失函数的基类。

自定义损失函数时应重写 construct ,并使用方法 self.get_lossreduction 应用于loss计算。

参数:
  • reduction (str) - 指定应用于输出结果的计算方式。可选值有:”mean”、”sum”、”none”。默认值:”mean”。

异常:
  • ValueError - reduction 不为’none’、’mean’或’sum’。

支持平台:

Ascend GPU CPU

get_axis(x)[源代码]

获取输入的轴范围。

参数:
  • x (Tensor) - 任何shape的Tensor。

样例:

>>> class Net(nn.LossBase):
...     def __init__(self, reduction='mean'):
...         super(Net, self).__init__(reduction)
...         self.abs = ops.Abs()
...
...     def construct(self, logits, labels):
...         x = self.abs(logits - labels)
...         axis = self.get_axis(x)
...         return axis
>>> net = Net()
>>> # Case 1: logits.shape = labels.shape = (3,)
>>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32)
>>> labels = Tensor(np.array([1, 2, 3]), mindspore.float32)
>>> output = net(logits, labels)
>>> print(output)
(0,)
>>> # Case 2: logits.shape = labels.shape = (3, 3)
>>> logits = Tensor(np.array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]), mindspore.float32)
>>> labels = Tensor(np.array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]), mindspore.float32)
>>> output = net(logits, labels)
>>> print(output)
(0, 1)
get_loss(x, weights=1.0)[源代码]

计算加权损失。

参数:
  • x (Tensor) - shape为 \((N, *)\) 的输入Tensor,其中 \(*\) 表示任意数量的附加维度。

  • weights (Union[float, Tensor]) - 可选值,要么rank为0,要么rank与输入相同,并且必须可广播到输入(即,所有维度必须为 1 ,或与相应输入的维度相同)。默认值:1.0。

返回:

返回加权损失。

样例:

>>> class Net(nn.LossBase):
...     def __init__(self, reduction='mean'):
...         super(Net, self).__init__(reduction)
...         self.abs = ops.Abs()
...
...     def construct(self, logits, labels):
...         x = self.abs(logits - labels)
...         output = self.get_loss(x)
...         return output
>>> net = Net()
>>> # Case 1: logits.shape = labels.shape = (3,)
>>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32)
>>> labels = Tensor(np.array([1, 2, 2]), mindspore.float32)
>>> output = net(logits, labels)
>>> print(output)
0.33333334
>>> # Case 2: logits.shape = labels.shape = (3, 3)
>>> logits = Tensor(np.array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]), mindspore.float32)
>>> labels = Tensor(np.array([[1, 2, 2],[1, 2, 3],[1, 2, 3]]), mindspore.float32)
>>> output = net(logits, labels)
>>> print(output)
0.11111111