!48955 [bugfix][api] Fix I6FCIG
Merge pull request !48955 from shaojunsong/fix/I6FCIG
This commit is contained in:
commit
978cfb6392
|
@ -24,7 +24,7 @@ mindspore.nn.HingeEmbeddingLoss
|
|||
其中 :math:`L = \{l_1,\dots,l_N\}^\top`。
|
||||
|
||||
参数:
|
||||
- **margin** (float) - Hinge Embedding Loss公式定义的阈值 :math:`margin`。公式中表示为 :math:`\Delta`。默认值:1.0。
|
||||
- **margin** (float, int) - Hinge Embedding Loss公式定义的阈值 :math:`margin`。公式中表示为 :math:`\Delta`。默认值:1.0。
|
||||
- **reduction** (str) - 指定应用于输出结果的计算方式,'none'、'mean'、'sum',默认值:'mean'。
|
||||
|
||||
输入:
|
||||
|
@ -35,8 +35,8 @@ mindspore.nn.HingeEmbeddingLoss
|
|||
Tensor或Tensor scalar,根据 :math:`reduction` 计算的loss。
|
||||
|
||||
异常:
|
||||
- **TypeError** - `logits` 不是Tensor。
|
||||
- **TypeError** - `labels` 不是Tensor。
|
||||
- **TypeError** - `margin` 不是float。
|
||||
- **TypeError** - `logits` 不是数据类型为float的Tensor。
|
||||
- **TypeError** - `labels` 不是数据类型为float的Tensor。
|
||||
- **TypeError** - `margin` 不是float或int。
|
||||
- **ValueError** - `labels` 和 `logits` shape不一致。
|
||||
- **ValueError** - `reduction` 不是"none"、"mean"或者"sum"。
|
||||
|
|
|
@ -26,15 +26,15 @@ mindspore.ops.hinge_embedding_loss
|
|||
参数:
|
||||
- **inputs** (Tensor) - 预测值,公式中表示为 :math:`x`,shape为 :math:`(*)`。`*` 代表着任意数量的维度。
|
||||
- **targets** (Tensor) - 标签值,公式中表示为 :math:`y`,和 `logits` 具有相同shape,包含1或-1。
|
||||
- **margin** (float) - Hinge Embedding Loss公式定义的阈值 :math:`margin`。公式中表示为 :math:`\Delta`。默认值:1.0。
|
||||
- **margin** (float, int) - Hinge Embedding Loss公式定义的阈值 :math:`margin`。公式中表示为 :math:`\Delta`。默认值:1.0。
|
||||
- **reduction** (str) - 指定应用于输出结果的计算方式,'none'、'mean'、'sum',默认值:'mean'。
|
||||
|
||||
返回:
|
||||
Tensor或Tensor scalar,根据 :math:`reduction` 计算的loss。
|
||||
|
||||
异常:
|
||||
- **TypeError** - `inputs` 不是Tensor。
|
||||
- **TypeError** - `targets` 不是Tensor。
|
||||
- **TypeError** - `margin` 不是float。
|
||||
- **TypeError** - `inputs` 不是数据类型为float的Tensor。
|
||||
- **TypeError** - `targets` 不是数据类型为float的Tensor。
|
||||
- **TypeError** - `margin` 不是float或者int。
|
||||
- **ValueError** - `inputs` 和 `targets` shape不一致。
|
||||
- **ValueError** - `reduction` 不是"none"、"mean"或者"sum"。
|
||||
|
|
|
@ -2492,7 +2492,7 @@ class HingeEmbeddingLoss(LossBase):
|
|||
where :math:`L = \{l_1,\dots,l_N\}^\top`.
|
||||
|
||||
Args:
|
||||
margin (float): Threshold defined by Hinge Embedding Loss :math:`margin`.
|
||||
margin (float, int): Threshold defined by Hinge Embedding Loss :math:`margin`.
|
||||
Represented as :math:`\Delta` in the formula. Default: 1.0.
|
||||
reduction (str): Specify the computing method to be applied to the outputs: 'none', 'mean', or 'sum'.
|
||||
Default: 'mean'.
|
||||
|
@ -2505,9 +2505,9 @@ class HingeEmbeddingLoss(LossBase):
|
|||
Tensor or Tensor scalar, the computed loss depending on `reduction`.
|
||||
|
||||
Raises:
|
||||
TypeError: If `logits` is not a Tensor.
|
||||
TypeError: If `labels` is not a Tensor.
|
||||
TypeError: If `margin` is not a float.
|
||||
TypeError: If `logits` is not a Tensor of floats.
|
||||
TypeError: If `labels` is not a Tensor of floats.
|
||||
TypeError: If `margin` is not a float or int.
|
||||
ValueError: If `labels` does not have the same shape as `logits`.
|
||||
ValueError: If `reduction` is not one of 'none', 'mean', 'sum'.
|
||||
|
||||
|
@ -2531,7 +2531,7 @@ class HingeEmbeddingLoss(LossBase):
|
|||
|
||||
def __init__(self, margin=1.0, reduction='mean'):
|
||||
super(HingeEmbeddingLoss, self).__init__()
|
||||
validator.check_value_type('margin', margin, [float], self.cls_name)
|
||||
validator.check_value_type('margin', margin, [float, int], self.cls_name)
|
||||
validator.check_string(reduction, ['none', 'sum', 'mean'], 'reduction', self.cls_name)
|
||||
self.margin = margin
|
||||
self.reduction = reduction
|
||||
|
|
|
@ -1731,7 +1731,7 @@ def signbit(x):
|
|||
|
||||
def sgn(x):
|
||||
r"""
|
||||
Extension of :func:`mindspore.ops.sign` in the plural.
|
||||
Extension of :func:`mindspore.ops.sign` in complex domain.
|
||||
For real number input, this function is the same as :func:`mindspore.ops.sign`.
|
||||
For complex input, this function is calculated according to the following formula.
|
||||
|
||||
|
@ -7185,7 +7185,7 @@ def norm(A, ord=None, dim=None, keepdim=False, *, dtype=None):
|
|||
====================== ================================ ==========================================
|
||||
|
||||
.. note::
|
||||
Currently, plural is not supported.
|
||||
Currently, complex numbers are not supported.
|
||||
|
||||
Args:
|
||||
A (Tensor): Tensor of shape :math:`(*, n)` or :math:`(*, m, n)` where * is zero or more batch dimensions.
|
||||
|
|
|
@ -4090,7 +4090,7 @@ def hinge_embedding_loss(inputs, targets, margin=1.0, reduction='mean'):
|
|||
Args:
|
||||
inputs (Tensor): Tensor of shape :math:`(*)` where :math:`*` means any number of dimensions.
|
||||
targets (Tensor): Same shape as the logits, contains -1 or 1.
|
||||
margin (float): Threshold defined by Hinge Embedding Loss :math:`margin`.
|
||||
margin (float, int): Threshold defined by Hinge Embedding Loss :math:`margin`.
|
||||
Represented as :math:`\Delta` in the formula. Default: 1.0.
|
||||
reduction (str): Specify the computing method to be applied to the outputs: 'none', 'mean', or 'sum'.
|
||||
Default: 'mean'.
|
||||
|
@ -4099,9 +4099,9 @@ def hinge_embedding_loss(inputs, targets, margin=1.0, reduction='mean'):
|
|||
Tensor or Tensor scalar, the computed loss depending on `reduction`.
|
||||
|
||||
Raises:
|
||||
TypeError: If `inputs` is not a Tensor.
|
||||
TypeError: If `targets` is not a Tensor.
|
||||
TypeError: If `margin` is not a float.
|
||||
TypeError: If `inputs` is not a Tensor of floats.
|
||||
TypeError: If `targets` is not a Tensor of floats.
|
||||
TypeError: If `margin` is not a float or int.
|
||||
ValueError: If `targets` does not have the same shape as `inputs`.
|
||||
ValueError: If `reduction` is not one of 'none', 'mean', 'sum'.
|
||||
|
||||
|
@ -4121,13 +4121,25 @@ def hinge_embedding_loss(inputs, targets, margin=1.0, reduction='mean'):
|
|||
>>> print(loss)
|
||||
0.16666666
|
||||
"""
|
||||
_dtype = inputs.dtype
|
||||
min_val = Tensor(0, _dtype)
|
||||
if not isinstance(margin, (float, int)):
|
||||
raise TypeError(f"For 'HingeEmbeddingLoss', 'margin' must be a float or int, but got {type(margin)}.")
|
||||
if reduction not in ['none', 'mean', 'sum']:
|
||||
raise ValueError(f"For 'HingeEmbeddingLoss', 'reduction' must be one of 'none', 'mean', 'sum',"
|
||||
f"but got {reduction}.")
|
||||
inputs_dtype = inputs.dtype
|
||||
targets_dtype = targets.dtype
|
||||
if inputs_dtype not in mstype.float_type:
|
||||
raise TypeError(f"For 'HingeEmbeddingLoss', the dtype of the first input must be float, but got "
|
||||
f"{inputs_dtype}.")
|
||||
if targets_dtype not in mstype.float_type:
|
||||
raise TypeError(f"For 'HingeEmbeddingLoss', the dtype of the second input must be float, but got "
|
||||
f"{targets_dtype}.")
|
||||
min_val = Tensor(0, inputs_dtype)
|
||||
pos_index = targets > 0
|
||||
neg_index = targets < 0
|
||||
pos = pos_index * inputs
|
||||
neg = neg_index * inputs
|
||||
m = ops.cast(margin, _dtype)
|
||||
m = ops.cast(margin, inputs_dtype)
|
||||
margin_matrix = m * neg_index
|
||||
neg = margin_matrix - neg
|
||||
neg = ops.clip_by_value(neg, min_val)
|
||||
|
|
Loading…
Reference in New Issue