Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ch.1 IndexError when using learn.fine_tune in examples #236

Closed
MaxThone opened this issue Aug 28, 2020 · 1 comment
Closed

Ch.1 IndexError when using learn.fine_tune in examples #236

MaxThone opened this issue Aug 28, 2020 · 1 comment

Comments

@MaxThone
Copy link

MaxThone commented Aug 28, 2020

Hi,

When running the examples in Chapter 1, I get the stack trace below when doing learn.fine_tune(1). specifically the error seems to be happening in the combine_scheds method.

Note: I'm running the code on a Databricks notebook, not on Jupyter, but for this particular error I don't think this should matter.

Stacktrace

<command-13768> in <module>
----> 1 learn.fine_tune(1)

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/utils.py in _f(*args, **kwargs)
    452         init_args.update(log)
    453         setattr(inst, 'init_args', init_args)
--> 454         return inst if to_return else f(*args, **kwargs)
    455     return _f
    456 

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/schedule.py in fine_tune(self, epochs, base_lr, freeze_epochs, lr_mult, pct_start, div, **kwargs)
    159     "Fine tune with `freeze` for `freeze_epochs` then with `unfreeze` from `epochs` using discriminative LR"
    160     self.freeze()
--> 161     self.fit_one_cycle(freeze_epochs, slice(base_lr), pct_start=0.99, **kwargs)
    162     base_lr /= 2
    163     self.unfreeze()

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/utils.py in _f(*args, **kwargs)
    452         init_args.update(log)
    453         setattr(inst, 'init_args', init_args)
--> 454         return inst if to_return else f(*args, **kwargs)
    455     return _f
    456 

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/schedule.py in fit_one_cycle(self, n_epoch, lr_max, div, div_final, pct_start, wd, moms, cbs, reset_opt)
    111     scheds = {'lr': combined_cos(pct_start, lr_max/div, lr_max, lr_max/div_final),
    112               'mom': combined_cos(pct_start, *(self.moms if moms is None else moms))}
--> 113     self.fit(n_epoch, cbs=ParamScheduler(scheds)+L(cbs), reset_opt=reset_opt, wd=wd)
    114 
    115 # Cell

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/utils.py in _f(*args, **kwargs)
    452         init_args.update(log)
    453         setattr(inst, 'init_args', init_args)
--> 454         return inst if to_return else f(*args, **kwargs)
    455     return _f
    456 

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in fit(self, n_epoch, lr, wd, cbs, reset_opt)
    202             self.opt.set_hypers(lr=self.lr if lr is None else lr)
    203             self.n_epoch,self.loss = n_epoch,tensor(0.)
--> 204             self._with_events(self._do_fit, 'fit', CancelFitException, self._end_cleanup)
    205 
    206     def _end_cleanup(self): self.dl,self.xb,self.yb,self.pred,self.loss = None,(None,),(None,),None,None

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
    153 
    154     def _with_events(self, f, event_type, ex, final=noop):
--> 155         try:       self(f'before_{event_type}')       ;f()
    156         except ex: self(f'after_cancel_{event_type}')
    157         finally:   self(f'after_{event_type}')        ;final()

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _do_fit(self)
    192         for epoch in range(self.n_epoch):
    193             self.epoch=epoch
--> 194             self._with_events(self._do_epoch, 'epoch', CancelEpochException)
    195 
    196     @log_args(but='cbs')

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
    153 
    154     def _with_events(self, f, event_type, ex, final=noop):
--> 155         try:       self(f'before_{event_type}')       ;f()
    156         except ex: self(f'after_cancel_{event_type}')
    157         finally:   self(f'after_{event_type}')        ;final()

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _do_epoch(self)
    186 
    187     def _do_epoch(self):
--> 188         self._do_epoch_train()
    189         self._do_epoch_validate()
    190 

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _do_epoch_train(self)
    178     def _do_epoch_train(self):
    179         self.dl = self.dls.train
--> 180         self._with_events(self.all_batches, 'train', CancelTrainException)
    181 
    182     def _do_epoch_validate(self, ds_idx=1, dl=None):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
    153 
    154     def _with_events(self, f, event_type, ex, final=noop):
--> 155         try:       self(f'before_{event_type}')       ;f()
    156         except ex: self(f'after_cancel_{event_type}')
    157         finally:   self(f'after_{event_type}')        ;final()

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in all_batches(self)
    159     def all_batches(self):
    160         self.n_iter = len(self.dl)
--> 161         for o in enumerate(self.dl): self.one_batch(*o)
    162 
    163     def _do_one_batch(self):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in one_batch(self, i, b)
    174         self.iter = i
    175         self._split(b)
--> 176         self._with_events(self._do_one_batch, 'batch', CancelBatchException)
    177 
    178     def _do_epoch_train(self):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
    153 
    154     def _with_events(self, f, event_type, ex, final=noop):
--> 155         try:       self(f'before_{event_type}')       ;f()
    156         except ex: self(f'after_cancel_{event_type}')
    157         finally:   self(f'after_{event_type}')        ;final()

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in __call__(self, event_name)
    131     def ordered_cbs(self, event): return [cb for cb in sort_by_run(self.cbs) if hasattr(cb, event)]
    132 
--> 133     def __call__(self, event_name): L(event_name).map(self._call_one)
    134 
    135     def _call_one(self, event_name):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in map(self, f, *args, **kwargs)
    381              else f.format if isinstance(f,str)
    382              else f.__getitem__)
--> 383         return self._new(map(g, self))
    384 
    385     def filter(self, f, negate=False, **kwargs):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in _new(self, items, *args, **kwargs)
    331     @property
    332     def _xtra(self): return None
--> 333     def _new(self, items, *args, **kwargs): return type(self)(items, *args, use_list=None, **kwargs)
    334     def __getitem__(self, idx): return self._get(idx) if is_indexer(idx) else L(self._get(idx), use_list=None)
    335     def copy(self): return self._new(self.items.copy())

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in __call__(cls, x, *args, **kwargs)
     45             return x
     46 
---> 47         res = super().__call__(*((x,) + args), **kwargs)
     48         res._newchk = 0
     49         return res

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in __init__(self, items, use_list, match, *rest)
    322         if items is None: items = []
    323         if (use_list is not None) or not _is_array(items):
--> 324             items = list(items) if use_list else _listify(items)
    325         if match is not None:
    326             if is_coll(match): match = len(match)

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in _listify(o)
    258     if isinstance(o, list): return o
    259     if isinstance(o, str) or _is_array(o): return [o]
--> 260     if is_iter(o): return list(o)
    261     return [o]
    262 

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastcore/foundation.py in __call__(self, *args, **kwargs)
    224             if isinstance(v,_Arg): kwargs[k] = args.pop(v.i)
    225         fargs = [args[x.i] if isinstance(x, _Arg) else x for x in self.pargs] + args[self.maxi+1:]
--> 226         return self.fn(*fargs, **kwargs)
    227 
    228 # Cell

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in _call_one(self, event_name)
    135     def _call_one(self, event_name):
    136         assert hasattr(event, event_name), event_name
--> 137         [cb(event_name) for cb in sort_by_run(self.cbs)]
    138 
    139     def _bn_bias_state(self, with_bias): return norm_bias_params(self.model, with_bias).map(self.opt.state)

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/learner.py in <listcomp>(.0)
    135     def _call_one(self, event_name):
    136         assert hasattr(event, event_name), event_name
--> 137         [cb(event_name) for cb in sort_by_run(self.cbs)]
    138 
    139     def _bn_bias_state(self, with_bias): return norm_bias_params(self.model, with_bias).map(self.opt.state)

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/core.py in __call__(self, event_name)
     42                (self.run_valid and not getattr(self, 'training', False)))
     43         res = None
---> 44         if self.run and _run: res = getattr(self, event_name, noop)()
     45         if event_name=='after_fit': self.run=True #Reset self.run to True at each end of fit
     46         return res

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/schedule.py in before_batch(self)
     84     def __init__(self, scheds): self.scheds = scheds
     85     def before_fit(self): self.hps = {p:[] for p in self.scheds.keys()}
---> 86     def before_batch(self): self._update_val(self.pct_train)
     87 
     88     def _update_val(self, pct):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/schedule.py in _update_val(self, pct)
     87 
     88     def _update_val(self, pct):
---> 89         for n,f in self.scheds.items(): self.opt.set_hyper(n, f(pct))
     90 
     91     def after_batch(self):

/local_disk0/.ephemeral_nfs/envs/pythonEnv-7d3b02f4-8c94-4299-8acc-1909d16e2085/lib/python3.7/site-packages/fastai/callback/schedule.py in _inner(pos)
     67         if pos == 1.: return scheds[-1](1.)
     68         idx = (pos >= pcts).nonzero().max()
---> 69         actual_pos = (pos-pcts[idx]) / (pcts[idx+1]-pcts[idx])
     70         return scheds[idx](actual_pos.item())
     71     return _inner

IndexError: index 3 is out of bounds for dimension 0 with size 3```
@MaxThone
Copy link
Author

After reading the docs, perhaps it's better to report this in the FastAI forum

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant