code: def reset_parameter(**kwargs):
      
      def _callback(env):
          new_parameters = {}
          for key, value in kwargs.items():
              if key in ['num_class', 'num_classes',
                         'boosting', 'boost', 'boosting_type',
                         'metric', 'metrics', 'metric_types']:
                  raise RuntimeError("cannot reset {} during training".format(repr(key)))
              if isinstance(value, list):
                  if len(value) != env.end_iteration - env.begin_iteration:
                      raise ValueError("Length of list {} has to equal to 'num_boost_round'."
                                       .format(repr(key)))
                  new_param = value[env.iteration - env.begin_iteration]
              else:
                  new_param = value(env.iteration - env.begin_iteration)
              if new_param != env.params.get(key, None):
                  new_parameters[key] = new_param
          if new_parameters:
              env.model.reset_parameter(new_parameters)
              env.params.update(new_parameters)
      _callback.before_iteration = True
      _callback.order = 10
      return _callback
docs: Create a callback that resets the parameter after the first iteration.
  
      Note
      ----
      The initial parameter will still take in-effect on first iteration.
  
      Parameters
      ----------
      **kwargs : value should be list or function
          List of parameters for each boosting round
          or a customized function that calculates the parameter in terms of
          current number of round (e.g. yields learning rate decay).
          If list lst, parameter = lst[current_round].
          If function func, parameter = func(current_round).
  
      Returns
      -------
      callback : function
          The callback that resets the parameter after the first iteration.