code: def multi_label_loss(top_out, targets, model_hparams, vocab_size, weights_fn):
    
    del vocab_size  # unused arg
    logits = top_out
    num_labels = tf.shape(targets)[1]
    logits = tf.tile(logits, [1, num_labels, 1, 1, 1])
  
    xent, weights = common_layers.padded_cross_entropy(
        logits,
        targets,
        model_hparams.label_smoothing,
        weights_fn=weights_fn,
        reduce_sum=False,
    )
    xent = tf.squeeze(xent, [2, 3])
    weights = tf.squeeze(weights, [2, 3])
    # average loss over all labels
    loss = tf.reduce_sum(xent, axis=1)
    weights = tf.reduce_sum(weights, axis=1)
    loss /= (weights + 1e-8)
    weights = tf.to_float(tf.greater(weights, 0.))
  
    return tf.reduce_sum(loss*weights), tf.reduce_sum(weights)
docs: Average loss over the labels.