code: def _get_teacher_loss(self, student_logits, teacher_logits):
      if self.loss_type == DistillationType.MSE:
          return functional.mse_loss(student_logits, teacher_logits)
      elif self.loss_type == DistillationType.KL_DIVERGENCE:
          return self._get_kl_divergence_penalty(
              student_logits, teacher_logits
          ) * (self.temperature**2)
      elif self.loss_type == DistillationType.CROSS_ENTROPY:
          return self._get_cross_entropy_penalty(
              student_logits, teacher_logits
          ) * (self.temperature**2)
      return torch.tensor(0.0, device=student_logits.device)
  
imports: from enum import Enum
  import torch
  import torch.nn
  import torch.nn.functional
  from classy_vision.losses import ClassyLoss, register_loss
  from vissl.config.attr_dict import AttrDict
  from vissl.losses.cross_entropy_multiple_output_single_target import SmoothCrossEntropy
label_desc: Use image node_id 3 for calling the DistillationCriterion obj's underlying member method code with example usage: obj._get_teacher_loss(student_logits, teacher_logits) and returns: torch, functional, unknown, unknown