code: def _check_valid_param_groups(
      cls, expected_param_groups, param_groups
  ):
      for i, param_group in enumerate(param_groups):
          numel = sum(p.numel() for p in param_group["params"])
          cls._assert_equal(
              set(param_group.keys()), {"params", "lr", "weight_decay"}
          )
          cls._assert_equal(
              len(param_group["params"]),
              expected_param_groups[i]["params_count"],
          )
          cls._assert_equal(
              numel, expected_param_groups[i]["params_numel"]
          )
          cls._assert_equal(
              param_group["lr"]._start_value,
              expected_param_groups[i]["start_lr"],
          )
          cls._assert_equal(
              param_group["lr"]._end_value,
              expected_param_groups[i]["end_lr"],
          )
          cls._assert_equal(
              param_group["weight_decay"],
              expected_param_groups[i]["weight_decay"],
          )
  
imports: import os
  import unittest
  from classy_vision.optim import build_optimizer_schedulers
  from vissl.config import AttrDict
  from vissl.models import build_model
  from vissl.optimizers import get_optimizer_param_groups
  from vissl.utils.checkpoint import CheckpointFormatConverter
  from vissl.utils.hydra_config import compose_hydra_configuration, convert_to_attrdict
  from vissl.utils.test_utils import gpu_test, in_temporary_directory, run_integration_test, spawn_distributed_test
label_desc: Use image node_id 6 for calling the TestFineTuning obj's underlying member method code with example usage: obj._check_valid_param_groups(cls, expected_param_groups, param_groups) without return types