code: def test_feature_dim_configurable(self):
      device = "cuda" if torch.cuda.is_available() else "cpu"
      for model_name, config in self.resnet_variants.items():
          resnet = resnet_generator(model_name)
          model = SimSiam(get_backbone(resnet), **config).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], config["num_ftrs"])
  
          # check that projection head output has right dimension
          with torch.no_grad():
              out_projection = model.projection_mlp(
                  out_features.squeeze()
              )
          self.assertEqual(out_projection.shape[1], config["out_dim"])
  
          # check that prediction head output has right dimension
          with torch.no_grad():
              out_prediction = model.prediction_mlp(
                  out_projection.squeeze()
              )
          self.assertEqual(out_prediction.shape[1], config["out_dim"])
  
file_path: lightly/tests/models/test_ModelsSimSiam.py
imports: import unittest
  import torch
  import torch.nn
  import torchvision
  from lightly.models import SimSiam
label_desc: Use image node_id 4 for calling the TestSimSiam obj's underlying member method code with example usage: obj.test_feature_dim_configurable() without return types