code: def triplet_loss(anchor, positive, negative, margin, extra=False, scope="triplet_loss"):
      r
  
      with tf.name_scope(scope):
          d_pos = tf.reduce_sum(tf.square(anchor - positive), 1)
          d_neg = tf.reduce_sum(tf.square(anchor - negative), 1)
  
          loss = tf.reduce_mean(tf.maximum(0., margin + d_pos - d_neg))
  
          if extra:
              pos_dist = tf.reduce_mean(tf.sqrt(d_pos + 1e-10), name='pos-dist')
              neg_dist = tf.reduce_mean(tf.sqrt(d_neg + 1e-10), name='neg-dist')
              return loss, pos_dist, neg_dist
          else:
              return loss
docs: r"""Loss for Triplet networks as described in the paper:
      `FaceNet: A Unified Embedding for Face Recognition and Clustering
      <https://arxiv.org/abs/1503.03832>`_
      by Schroff et al.
  
      Learn embeddings from an anchor point and a similar input (positive) as
      well as a not-similar input (negative).
      Intuitively, a matching pair (anchor, positive) should have a smaller relative distance
      than a non-matching pair (anchor, negative).
  
      .. math::
          \max(0, m + \Vert a-p\Vert^2 - \Vert a-n\Vert^2)
  
      Args:
          anchor (tf.Tensor): anchor feature vectors of shape [Batch, N].
          positive (tf.Tensor): features of positive match of the same shape.
          negative (tf.Tensor): features of negative match of the same shape.
          margin (float): horizon for negative examples
          extra (bool): also return distances for pos and neg.
  
      Returns:
          tf.Tensor: triplet-loss as scalar (and optionally average_pos_dist, average_neg_dist)