code: def training_step(self, batch, batch_idx):
      momentum = cosine_schedule(self.current_epoch, 10, 0.996, 1)
      update_momentum(
          self.student_backbone, self.teacher_backbone, m=momentum
      )
      update_momentum(self.student_head, self.teacher_head, m=momentum)
      views = batch[0]
      views = [view.to(self.device) for view in views]
      global_views = views[:2]
      teacher_out = [
          self.forward_teacher(view) for view in global_views
      ]
      student_out = [self.forward(view) for view in views]
      loss = self.criterion(
          teacher_out, student_out, epoch=self.current_epoch
      )
      return loss
  
file_path: lightly/examples/pytorch_lightning/dino.py
imports: import copy
  import pytorch_lightning
  import torch
  import torchvision
  from torch import nn
  from lightly.loss import DINOLoss
  from lightly.models.modules import DINOProjectionHead
  from lightly.models.utils import deactivate_requires_grad, update_momentum
  from lightly.transforms.dino_transform import DINOTransform
  from lightly.utils.scheduler import cosine_schedule
label_desc: Use image node_id 4 for calling the DINO obj's underlying member method code with example usage: obj.training_step(batch, batch_idx) and returns: loss