mindspore.nn.LossBase
- class mindspore.nn.LossBase(reduction='mean')[源代码]
损失函数的基类。
自定义损失函数时应重写 construct ,并使用方法 self.get_loss 将 reduction 应用于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) - 输入数据,任意维度的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