code: def count_parameters(params) -> Tuple[int, int]:
      """
  
      Parameters
      ----------
      params
          The input parameter dict
  
      Returns
      -------
      num_params
          The number of parameters that requires gradient
      num_fixed_params
          The number of parameters that does not require gradient
      """
      num_params = 0
      num_fixed_params = 0
      param_uuid_set = set()
      for k, v in params.items():
          if v._uuid in param_uuid_set:
              continue
          param_uuid_set.add(v._uuid)
          if v.grad_req != "null":
              if v._data is None:
                  warnings.warn(
                      '"{}" is not initialized! The total parameter count '
                      "will not be correct.".format(k)
                  )
              else:
                  num_params += np.prod(v.shape)
          else:
              if v._data is None:
                  warnings.warn(
                      '"{}" is not initialized! The total fixed parameter count '
                      "will not be correct.".format(k)
                  )
              else:
                  num_fixed_params += np.prod(v.shape)
      return num_params, num_fixed_params
  
imports: import warnings
  import numpy
  import mxnet
  from collections import defaultdict
  from mxnet.gluon import Parameter
  from mxnet.util import use_np
  from typing import Iterable, Optional, Tuple
  from collections import OrderedDict
  from mxnet.gluon.utils import shape_is_known
label_desc: Use image node_id 5 for calling a global function with example usage: count_parameters(params) and returns: num_params,  num_fixed_params