mindflow.loss
- class mindflow.loss.MTLWeightedLossCell(num_losses, bound_param=0.0)[源代码]
计算MTL策略自动加权多任务损失。请参考 自动加权进行多任务学习 。
- 参数:
num_losses (int) - 多任务损失的数量,应为正整数。
bound_param (float) - 当边界值大于某个给定常数时,对权重和正则项的增加。
- 输入:
input (tuple[Tensor]) - 输入数据。
- 输出:
Tensor。多任务学习自动加权计算出的损失。
- 支持平台:
Ascend
GPU
样例:
>>> import numpy as np >>> from mindflow.loss import MTLWeightedLossCell >>> import mindspore >>> from mindspore import Tensor >>> net = MTLWeightedLossCell(num_losses=2) >>> input1 = Tensor(1.0, mindspore.float32) >>> input2 = Tensor(0.8, mindspore.float32) >>> output = net((input1, input2)) >>> print(output) 2.2862945
- class mindflow.loss.RelativeRMSELoss(reduction='sum')[源代码]
相对均方根误差(RRMSE)是由均方根值归一化的均方根误差,其中每个残差都是根据实际值缩放的。 Relative RMSELoss用来测量 \(x\) 和 \(y\) 之间的相对均方根误差,其中 \(x\) 是预测值, \(y\) 是目标值。
假设 \(x\) 和 \(y\) 为一维Tensor,长度为 \(N\) ,则 \(x\) 和 \(y\) 的损失为:
\[loss = \sqrt{\frac{\frac{1}{N}\sum_{i=1}^{N}{(x_i-y_i)^2}}{sum_{i=1}^{N}{(y_i)^2}}}\]- 参数:
reduction (str) - reduction 决定了计算模式。有三种模式可选:”mean”,”sum”和”none”。默认值:”sum”。
- 输入:
prediction (Tensor) - 网络模型预测值。Tensor的形状 \((N, *)\) 其中 \(*\) 表示任意维度。
labels (Tensor) - 样本的真实值。Tensor的形状 \((N, *)\) 其中 :math: * 表示任意维度,通常情况下和 prediction 的形状一致。但是,也支持labels的形状和prediction的形状不一致,两者应该可以相互广播。
- 输出:
Tensor。加权计算出的损失。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import numpy as np >>> import mindspore >>> from mindspore import Tensor >>> from mindflow import RelativeRMSELoss >>> # Case: prediction.shape = labels.shape = (3, 3) >>> prediction = 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) >>> loss_fn = RelativeRMSELoss() >>> loss = loss_fn(prediction, labels) >>> print(loss) 0.33333334
- class mindflow.loss.WaveletTransformLoss(wave_level=2, regroup=False)[源代码]
多级小波变换损失。
- 参数:
wave_level (int) - 小波变换级数,应为正整数。默认值:2。
regroup (bool) - 小波变换损失的regroup误差组合形式。默认值:False。
- 输入:
input - Tensors的tuple。形状 \((B H*W/(P*P)P*P*C)\) 的Tensor,其中B表示批次大小。H、W分别表示图像的高度和宽度。P表示补丁大小。C表示特征通道。
- 输出:
Tensor。
- 异常:
TypeError - 如果 wave_level 不是int。
TypeError - 如果 regroup bool。
- 支持平台:
Ascend
GPU
样例:
>>> import numpy as np >>> from mindflow.loss import WaveletTransformLoss >>> import mindspore >>> from mindspore import Tensor >>> net = WaveletTransformLoss(wave_level=2) >>> input1 = Tensor(np.ones((32, 288, 768)), mstype.float32) >>> input2 = Tensor(np.ones((32, 288, 768)), mstype.float32) >>> output = net((input1, input2)) >>> print(output) 2.0794415
- mindflow.loss.get_loss_metric(name)[源代码]
获取损失函数。
- 参数:
name (str) - 损失函数的名称。
- 返回:
Function,损失函数。
- 支持平台:
Ascend
GPU
样例:
>>> import numpy as np >>> from mindflow.loss import get_loss_metric >>> import mindspore >>> from mindspore import Tensor >>> l1_loss = get_loss_metric('l1_loss') >>> logits = Tensor(np.array([1, 2, 3]), mindspore.float32) >>> labels = Tensor(np.array([[1, 1, 1], [1, 2, 2]]), mindspore.float32) >>> output = l1_loss(logits, labels) >>> print(output) 0.6666667