code: def fit_sgdr(
      self: Learner,
      n_cycles,
      cycle_len,
      lr_max=None,
      cycle_mult=2,
      cbs=None,
      reset_opt=False,
      wd=None,
      start_epoch=0,
  ):
      "Fit `self.model` for `n_cycles` of `cycle_len` using SGDR."
      if self.opt is None:
          self.create_opt()
      self.opt.set_hyper("lr", self.lr if lr_max is None else lr_max)
      lr_max = np.array([h["lr"] for h in self.opt.hypers])
      n_epoch = (
          cycle_len * (cycle_mult**n_cycles - 1) // (cycle_mult - 1)
      )
      pcts = [
          cycle_len * cycle_mult**i / n_epoch for i in range(n_cycles)
      ]
      scheds = [SchedCos(lr_max, 0) for _ in range(n_cycles)]
      scheds = {"lr": combine_scheds(pcts, scheds)}
      self.fit(
          n_epoch,
          cbs=ParamScheduler(scheds) + L(cbs),
          reset_opt=reset_opt,
          wd=wd,
          start_epoch=start_epoch,
      )
  
imports: from __future__ import annotations
  from ..basics import *
  from .tracker import SaveModelCallback
label_desc: Use image node_id 16 for calling a global function with example usage: fit_sgdr(n_cycles, cycle_len, lr_max, cycle_mult, cbs, reset_opt, wd, start_epoch) without return types