示例#1
0
 def wd(self, val: float) -> None:
     "Set weight decay."
     if not self.true_wd:
         self.set_val('weight_decay',
                      listify(val, self._wd),
                      bn_groups=self.bn_wd)
     self._wd = listify(val, self._wd)
示例#2
0
 def beta(self, val: float) -> None:
     "Set beta (or alpha as makes sense for given optimizer)."
     if val is None: return
     if 'betas' in self.opt_keys:
         self.set_val('betas', (self._mom, listify(val, self._beta)))
     elif 'alpha' in self.opt_keys:
         self.set_val('alpha', listify(val, self._beta))
     self._beta = listify(val, self._beta)
示例#3
0
 def set_stat(self, name: str, value: Union[float,
                                            Collection[float]]) -> None:
     if name in ['lr', 'mom', 'beta', 'wd']:
         setattr(self, name, value)
     else:
         val = listify(value, self._stats[name])
         self.set_val(name, val)
         self._stats[name] = val
示例#4
0
 def create(cls,
            opt_func: object,
            lr: object,
            layer_groups: object,
            wd: object = 0.,
            true_wd: object = False,
            bn_wd: object = True) -> object:
     "Create an `optim.Optimizer` from `opt_func` with `lr`. Set lr on `layer_groups`."
     opt: object = opt_func
     opt = cls(opt, wd=wd, true_wd=true_wd, bn_wd=bn_wd)
     opt.lr, opt.opt_func = listify(lr, layer_groups), opt_func
     return opt
示例#5
0
 def step(self, closure=None) -> None:
     "Set weight decay and step optimizer."
     # weight decay outside of optimizer step (AdamW)
     if self.true_wd:
         lr: List[Any]
         for lr, wd, pg1, pg2 in zip(self._lr, self._wd,
                                     self.opt.param_groups[::2],
                                     self.opt.param_groups[1::2]):
             for p in pg1['params']:
                 p.data.mul_(1 - wd * lr)
             if self.bn_wd:
                 for p in pg2['params']:
                     p.data.mul_(1 - wd * lr)
         self.set_val('weight_decay', listify(0, self._wd))
     self.opt.step(closure)
示例#6
0
 def mom(self, val: float) -> None:
     if 'momentum' in self.opt_keys:
         self.set_val('momentum', listify(val, self._mom))
     elif 'betas' in self.opt_keys:
         self.set_val('betas', (listify(val, self._mom), self._beta))
     self._mom = listify(val, self._mom)
示例#7
0
 def lr(self, val: float) -> None:
     self._lr = self.set_val('lr', listify(val, self._lr))