class_docstr: Bootstrap Your Own Latent A New Approach to Self-Supervised Learning
  Details can be found in:
  https://arxiv.org/pdf/2006.07733.pdf
docstr: Args:
      x1 (torch.tensor): a batch of image with augmentation. The input tensor
          shape should able to be feed into the backbone.
      x2 (torch.tensor): the size batch of image with different augmentation. The
          input tensor shape should able to be feed into the backbone.
docstr_tok: ["Args",":","x1","(","torch.tensor",")",":","a","batch","of","image","with","augmentation",".","The","input","tensor","shape","should","able","to","be","feed","into","the","backbone",".","x2","(","torch.tensor",")",":","the","size","batch","of","image","with","different","augmentation",".","The","input","tensor","shape","should","able","to","be","feed","into","the","backbone","."]
code: def forward(self, x1: torch.Tensor, x2: torch.Tensor) -> torch.Tensor:
      """
      Args:
          x1 (torch.tensor): a batch of image with augmentation. The input tensor
              shape should able to be feed into the backbone.
          x2 (torch.tensor): the size batch of image with different augmentation. The
              input tensor shape should able to be feed into the backbone.
      """
      pred_1 = self.forward_backbone(x1)
      pred_2 = self.forward_backbone(x2)
  
      with torch.no_grad():
          self._momentum_update_backbone()
          proj_mmt_1 = self.forward_backbone_mmt(x1)
          proj_mmt_2 = self.forward_backbone_mmt(x2)
  
      loss = (
          self.sim_loss(pred_1, proj_mmt_2)
          + self.sim_loss(pred_2, proj_mmt_1)
      ) / 2
      return loss
  
file_path: pytorchvideo/pytorchvideo/models/byol.py
imports: import copy
  from typing import Callable, Optional
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 8 for calling the BYOL obj's underlying member method code with example usage: obj.forward(x1, x2) and returns: loss