code: def test_lr_values(
      self, input_param, expected_values, expected_groups
  ):
      device = "cuda" if torch.cuda.is_available() else "cpu"
      net = Unet(
          spatial_dims=3,
          in_channels=1,
          out_channels=3,
          channels=(16, 32, 64),
          strides=(2, 2),
          num_res_units=1,
      ).to(device)
  
      params = generate_param_groups(network=net, **input_param)
      optimizer = torch.optim.Adam(params, 100)
  
      for param_group, value in zip(
          optimizer.param_groups, ensure_tuple(expected_values)
      ):
          assert_allclose(param_group["lr"], value)
  
      n = [len(p["params"]) for p in params]
      self.assertListEqual(n, expected_groups)
  
file_path: MONAI/tests/test_generate_param_groups.py
imports: from __future__ import annotations
  import unittest
  import torch
  from parameterized import parameterized
  from monai.networks.nets import Unet
  from monai.optimizers import generate_param_groups
  from monai.utils import ensure_tuple
  from tests.utils import assert_allclose
label_desc: Use image node_id 1 for calling the TestGenerateParamGroups obj's underlying member method code with example usage: obj.test_lr_values(input_param, expected_values, expected_groups) without return types