import tensorflow as tf


  Args:
      xs: 4-D `tensor` [batch_size, height, width, channels], input

  Returns:
      a `float` decov loss
  """
  with tf.name_scope(name):
    x = tf.reshape(xs, [int(xs.get_shape()[0]), -1])
    m = tf.reduce_mean(x, 0, True)
    z = tf.expand_dims(x - m, 2)
    corr = tf.reduce_mean(tf.matmul(z, tf.transpose(z, perm=[0, 2, 1])), 0)
    corr_frob_sqr = tf.reduce_sum(tf.square(corr))
    corr_diag_sqr = tf.reduce_sum(tf.square(tf.diag_part(corr)))
    loss = 0.5 * (corr_frob_sqr - corr_diag_sqr)
    return loss


def center_loss(features, label, alpha, num_classes, name='center_loss'):
  """Center loss based on the paper "A Discriminative Feature Learning Approach
  for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf)

