class_docstr: Distilling the Knowledge in a Neural Network, arXiv:1503.02531 
code: def call(
      self,
      logits=None,
      input_length=None,
      labels=None,
      label_length=None,
      **kwargs,
  ):
      assert "soft_lables" in kwargs
      soft_labels = kwargs["soft_labels"]
  
      loss_standard = cross_entropy(
          logits=logits,
          input_length=input_length,
          labels=labels,
          label_length=label_length,
          smoothing=self.smoothing,
      )
      loss_soft = cross_entropy(
          logits=logits / self.T,
          input_length=input_length,
          labels=soft_labels,
          label_length=label_length,
          smoothing=self.smoothing,
      )
      # Since the magnitudes of the gradients produced by the soft targets
      # scale as 1/T2 , it is important to multiply them by T2 when using
      # both hard and soft targets
      total_loss = (
          self.alpha * tf.square(self.T) * loss_soft
          + (1 - self.alpha) * loss_standard
      )
  
      return total_loss
  
imports: import delta.compat
  from delta.utils.loss.base_loss import Loss
  from delta.utils.loss.loss_utils import cross_entropy
  from delta.utils.loss.loss_utils import mask_sequence_loss
  from delta.utils.loss.loss_utils import ctc_lambda_loss
  from delta.utils.loss.loss_utils import crf_log_likelihood
  from delta.utils.loss.loss_utils import focal_loss
  from delta.utils.register import registers
label_desc: Use image node_id 2 for calling the DistillationLoss obj's underlying member method code with example usage: obj.call(logits, input_length, labels, label_length) and returns: total_loss