mindsponge.metrics.BalancedMSE

class mindsponge.metrics.BalancedMSE(first_break, last_break, num_bins, beta=0.99, reducer_flag=False)[源代码]

计算预测值和真实值之间的均衡平方误差,适用于回归任务中标签不平衡的场景。详细实现过程参考: Ren, Jiawei, et al. ‘Balanced MSE for Imbalanced Visual Regression’

\[L =-\log \mathcal{N}(\boldsymbol{y} ; \boldsymbol{y}_{\text {pred }}, \sigma_{\text {noise }}^{2} \mathrm{I})+\log \sum_{i=1}^{N} p_{\text {train }}(\boldsymbol{y}_{(i)}) \cdot \mathcal{N}(\boldsymbol{y}_{(i)} ; \boldsymbol{y}_{\text {pred }}, \sigma_{\text {noise }}^{2} \mathrm{I})\]
参数:
  • first_break (float) - bin划分的起始位置。

  • last_break (float) - bin划分的结束位置。

  • num_bins (int) - 划分bin的数目。

  • beta (float) - 滑动平均的系数。默认值:0.99。

  • reducer_flag (bool) - 是否对多卡的标签值做聚合。默认值:False。

输入:
  • prediction (Tensor) - 模型预测值,shape为 \((batch\_size, ndim)\)

  • target (Tensor) - 标签值,shape为 \((batch\_size, ndim)\)

输出:

Tensor。shape为 \((batch\_size, ndim)\)

支持平台:

Ascend GPU

样例:

>>> import numpy as np
>>> from mindsponge.metrics import BalancedMSE
>>> from mindspore import Tensor
>>> net = BalancedMSE(0, 1, 20)
>>> prediction = Tensor(np.random.randn(32, 10).astype(np.float32))
>>> target = Tensor(np.random.randn(32, 10).astype(np.float32))
>>> out = net(prediction, target)
>>> print(out.shape)
(32, 10)