mindspore.nn.LossBase

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

损失函数的基类。

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

参数:
  • reduction (str,可选) - 指定应用于输出结果的规约计算方式,可选 'none''mean''sum' ,默认值: 'mean'

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

    • "mean":计算输出元素的(加权)平均值。

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

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

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> from mindspore import ops, Tensor, nn
>>> import numpy as np
>>>
>>> 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)
...         axis = self.get_axis(x)
...         return output, 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, 2]), mindspore.float32)
>>> output, axis = net(logits, labels)
>>> print(output)
0.33333334
>>> print(axis)
(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, 2],[1, 2, 3],[1, 2, 3]]), mindspore.float32)
>>> output, axis = net(logits, labels)
>>> print(output)
0.11111111
>>> print(axis)
(0, 1)
get_axis(x)[源代码]

获取输入的轴范围。

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

get_loss(x, weights=1.0)[源代码]

计算加权损失。

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

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

返回:

返回加权损失。