class_docstr: Skeletal NN.Module for the SimCLR model that supports
  arbitrary bacbone and projector models.
docstr: Args:
      backbone (nn.Module): backbone for simclr, input shape depends on the forward
          input size. Standard inputs include `B x C`, `B x C x H x W`, and
          `B x C x T x H x W`.
      projector (nn.Module): An mlp with 2 to 3 hidden layers,
          with (synchronized) BatchNorm and ReLU activation.
docstr_tok: ["Args",":","backbone","(","nn.Module",")",":","backbone","for","simclr",",","input","shape","depends","on","the","forward","input","size",".","Standard","inputs","include","`","B","x","C","`",",","`","B","x","C","x","H","x","W","`",",","and","`","B","x","C","x","T","x","H","x","W","`",".","projector","(","nn.Module",")",":","An","mlp","with","2","to","3","hidden","layers",",","with","(","synchronized",")","BatchNorm","and","ReLU","activation","."]
code: def __init__(
      self,
      backbone: nn.Module,
      projector: Optional[nn.Module] = None,
  ) -> None:
      """
      Args:
          backbone (nn.Module): backbone for simclr, input shape depends on the forward
              input size. Standard inputs include `B x C`, `B x C x H x W`, and
              `B x C x T x H x W`.
          projector (nn.Module): An mlp with 2 to 3 hidden layers,
              with (synchronized) BatchNorm and ReLU activation.
      """
      super().__init__()
  
      if projector is not None:
          backbone = nn.Sequential(
              backbone,
              projector,
          )
      init_net_weights(backbone)
      self.backbone = backbone
  
imports: from dataclasses import dataclass
  from typing import Any, Callable, List, Optional, Union
  import torch
  import torch.nn
  import torch.nn.functional
  from hydra.core.config_store import ConfigStore
  from omegaconf import MISSING
  from pytorchvideo.models.resnet import create_resnet
  from pytorchvideo.models.weight_init import init_net_weights
  from pytorchvideo_trainer.module.byol import create_mlp_util
  from pytorchvideo_trainer.module.ssl_helper import SSLBaseModule
  from pytorchvideo_trainer.module.video_classification import Batch, BatchKey, EnsembleMethod
  from torchrecipes.core.conf import ModuleConf
  from torchrecipes.utils.config_utils import get_class_name_str
label_desc: Use image node_id 1 to create a new SimCLR object from inherited base classes: nn with example: obj = SimCLR(backbone, projector)