code: def test_resnet_param_groups(self) -> None:
      config = self._create_pretraining_config("quick_swav")
      config.OPTIMIZER.regularize_bias = False
      model = build_model(config["MODEL"], config["OPTIMIZER"])
      for n, _p in model.named_parameters():
          print(n, get_resnet_param_depth(n, num_layers=4))
  
      for layer_name, expected_depth in [
          ("trunk._feature_blocks.conv1.weight", 0),
          ("trunk._feature_blocks.bn1.weight", 0),
          ("trunk._feature_blocks.bn1.bias", 0),
          ("trunk._feature_blocks.layer2.0.downsample.1.bias", 2),
          ("trunk._feature_blocks.layer4.1.conv3.weight", 4),
      ]:
          depth = get_resnet_param_depth(layer_name, num_layers=4)
          self.assertEqual(expected_depth, depth)
  
      optimizer_schedulers = build_optimizer_schedulers(
          config["OPTIMIZER"]
      )
      param_groups = get_optimizer_param_groups(
          model=model,
          model_config=config["MODEL"],
          optimizer_config=config["OPTIMIZER"],
          optimizer_schedulers=optimizer_schedulers,
      )
      for g in param_groups:
          for k in ["lr", "weight_decay"]:
              print(k, g[k])
  
file_path: vissl/tests/test_finetuning_vit.py
imports: import unittest
  from classy_vision.optim import build_optimizer_schedulers
  from vissl.models import build_model
  from vissl.optimizers import get_optimizer_param_groups
  from vissl.optimizers.param_groups.layer_decay import get_resnet_param_depth, get_vit_param_depth
  from vissl.utils.hydra_config import compose_hydra_configuration, convert_to_attrdict
  from vissl.utils.test_utils import gpu_test
label_desc: Use image node_id 3 for calling the TestFineTuningVit obj's underlying member method code with example usage: obj.test_resnet_param_groups() without return types