/content/fastai2/fastai2/optimizer.py in set_hypers(self, **kwargs)
32
33 def unfreeze(self): self.freeze_to(0)
---> 34 def set_hypers(self, **kwargs): L(kwargs.items()).starmap(self.set_hyper)
35 def _set_hyper(self, k, v):
36 for v_,h in zip(v, self.hypers): h[k] = v_
....
/content/fastai2/fastai2/optimizer.py in set_hyper(self, k, v)
42 v = L(v, use_list=None)
43 if len(v)==1: v = v*len(self.param_lists)
---> 44 assert len(v) == len(self.hypers), f"Trying to set {len(v)} values for {k} but there are {len(self.param_lists)} parameter groups."
45 self._set_hyper(k, v)
46
AssertionError: Trying to set 14 values for lr but there are 1 parameter groups.
I’d first check your number of layer groups after splitting. The quick way is to do a learn.freeze() followed by .summary() and see how many are frozen. But how are you defining your split? IE what does it look like?
# Names come from, for nm in model.named_modules(): print(nm[0])
def hf_electra_param_splitter(model, num_hidden_layers):
names = ['0.model.embeddings', *[f'0.model.encoder.layer.{i}' for i in range(num_hidden_layers)], '1']
groups = [ mod.parameters() for name, mod in model.named_modules() if name in names]
return groups
def get_layer_lrs(lr, lr_decay, num_hidden_layers):
# I think input layer as bottom and output layer as top, which is different from official repo
return [ lr * (lr_decay ** depth) for depth in reversed(range(num_hidden_layers+2))]
I try the change to get 14 lists instead of generators.
But I get another message.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-32-b586e752124c> in <module>()
----> 1 single_task_learn.fit_one_cycle(n_epoch=3)
...
/content/fastai2/fastai2/optimizer.py in step(self)
80
81 def step(self):
---> 82 for p,pg,state,hyper in self.all_params(with_grad=True):
83 for cb in self.cbs: state = _update(state, cb(p, **{**state, **hyper}))
84 self.state[p] = state
/content/fastai2/fastai2/optimizer.py in all_params(self, n, with_grad)
14 def all_params(self, n=slice(None), with_grad=False):
15 res = L((p,pg,self.state[p],hyper) for pg,hyper in zip(self.param_lists[n],self.hypers[n]) for p in pg)
---> 16 return L(o for o in res if o[0].grad is not None) if with_grad else res
17
18 def _set_require_grad(self, rg, p,pg,state,h): p.requires_grad_(rg or state.get('force_train', False))
...
/content/fastai2/fastai2/optimizer.py in <genexpr>(.0)
14 def all_params(self, n=slice(None), with_grad=False):
15 res = L((p,pg,self.state[p],hyper) for pg,hyper in zip(self.param_lists[n],self.hypers[n]) for p in pg)
---> 16 return L(o for o in res if o[0].grad is not None) if with_grad else res
17
18 def _set_require_grad(self, rg, p,pg,state,h): p.requires_grad_(rg or state.get('force_train', False))
AttributeError: 'generator' object has no attribute 'grad'