code: def test_feature_dim_configurable(self):
      device = "cuda" if torch.cuda.is_available() else "cpu"
      for model_name in self.resnet_variants:
          for num_ftrs, out_dim in zip([16, 64], [64, 256]):
              resnet = ResNetGenerator(model_name)
              model = SimCLR(
                  get_backbone(resnet, num_ftrs=num_ftrs),
                  num_ftrs=num_ftrs,
                  out_dim=out_dim,
              ).to(device)
  
              # check that feature vector has correct dimension
              with torch.no_grad():
                  out_features = model.backbone(
                      self.input_tensor.to(device)
                  )
              self.assertEqual(out_features.shape[1], num_ftrs)
  
              # check that projection head output has right dimension
              with torch.no_grad():
                  out_projection = model.projection_head(
                      out_features.squeeze()
                  )
              self.assertEqual(out_projection.shape[1], out_dim)
              self.assertIsNotNone(model)
  
file_path: lightly/tests/models/test_ModelsSimCLR.py
imports: import unittest
  import torch
  import torch.nn
  import torchvision
  import lightly
  from lightly.models import ResNetGenerator, SimCLR
label_desc: Use image node_id 4 for calling the TestModelsSimCLR obj's underlying member method code with example usage: obj.test_feature_dim_configurable() without return types