# tfa.losses.npairs_multilabel_loss

Computes the npairs loss between multilabel data `y_true` and `y_pred`.

Npairs loss expects paired data where a pair is composed of samples from the same labels and each pairs in the minibatch have different labels. The loss takes each row of the pair-wise similarity matrix, `y_pred`, as logits and the remapped multi-class labels, `y_true`, as labels.

To deal with multilabel inputs, the count of label intersection is computed as follows:

``````L_{i,j} = | set_of_labels_for(i) \cap set_of_labels_for(j) |
``````

Each row of the count based label matrix is further normalized so that each row sums to one.

`y_true` should be a binary indicator for classes. That is, if `y_true[i, j] = 1`, then `i`th sample is in `j`th class; if `y_true[i, j] = 0`, then `i`th sample is not in `j`th class.

The similarity matrix `y_pred` between two embedding matrices `a` and `b` with shape `[batch_size, hidden_size]` can be computed as follows:

``````# y_pred = a * b^T
y_pred = tf.matmul(a, b, transpose_a=False, transpose_b=True)
``````

`y_true` Either 2-D integer `Tensor` with shape `[batch_size, num_classes]`, or `SparseTensor` with dense shape `[batch_size, num_classes]`. If `y_true` is a `SparseTensor`, then it will be converted to `Tensor` via `tf.sparse.to_dense` first.
`y_pred` 2-D float `Tensor` with shape `[batch_size, batch_size]` of similarity matrix between embedding matrices.

`npairs_multilabel_loss` float scalar.