mindspore.ops.binary_cross_entropy

mindspore.ops.binary_cross_entropy(logits, labels, weight=None, reduction='mean')[source]

Computes the binary cross entropy between predictive value logits and target value labels.

Set logits as \(x\), labels as \(y\), output as \(\ell(x, y)\), the weight of nth batch of binary cross entropy is \(w_n\). Let,

\[L = \{l_1,\dots,l_N\}^\top, \quad l_n = - w_n \left[ y_n \cdot \log x_n + (1 - y_n) \cdot \log (1 - x_n) \right]\]

In which, \(L\) indicates the loss of all batch_size, \(l\) indicates the loss of one batch_size, and \(n\) indicates one batch_size in the \(1-N\) range. Then,

\[\begin{split}\ell(x, y) = \begin{cases} L, & \text{if reduction} = \text{'none';}\\ \operatorname{mean}(L), & \text{if reduction} = \text{'mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{'sum'.} \end{cases}\end{split}\]

Warning

  • The value of logits must range from 0 to l.

  • The value of labels must be 0 or l.

Parameters
  • logits (Tensor) – The predictive value whose data type must be float16 or float32. The shape is \((N, *)\) where \(*\) means, any number of additional dimensions.

  • labels (Tensor) – The target value which has the same shape and data type as logits.

  • weight (Tensor, optional) – A rescaling weight applied to the loss of each batch element. Its shape must be able to broadcast to that of logits and labels. And it must have the same shape and data type as logits. Default: None.

  • reduction (str) – Specifies the reduction to be applied to the output. Its value must be one of ‘none’, ‘mean’ or ‘sum’, not case-sensitive. Default: ‘mean’.

Returns

Tensor or Scalar. Returns Tensor that has the same dtype and shape as logits if reduction is ‘none’. Otherwise, returns a scalar Tensor.

Raises
  • TypeError – If logits, labels or weight is not a Tensor.

  • TypeError – If dtype of logits, labels or weight (if given) is neither float16 nor float32.

  • ValueError – If reduction is not one of ‘none’, ‘mean’ or ‘sum’.

  • ValueError – If shape of labels is not the same as logits or weight (if given).

Supported Platforms:

Ascend GPU CPU

Examples

>>> logits = Tensor(np.array([0.2, 0.7, 0.1]), mindspore.float32)
>>> labels = Tensor(np.array([0., 1., 0.]), mindspore.float32)
>>> weight = Tensor(np.array([1, 2, 2]), mindspore.float32)
>>> output = ops.binary_cross_entropy(logits, labels, weight)
>>> print(output)
0.38240486