Hey folks,
I’m trying to implement a callback
that visualizes my image prediction. Here’s my code:
class VisualisePredictions(Callback):
"Visualize predictions"
order = ProgressCallback.order+1
def after_epoch(self, **kwargs):
dl=self.dls[1]
b=dl.one_batch()
_,_,prd=self.get_preds(dl=[b],with_decoded=True)
dec = self.dls.after_batch.decode((TensorRawImage(prd),))[0][0]
show_raw_image(dec) # This is my personalised function that gets a tensor, converts it to np.float32 array, then coverts it from 65536 to 255, then displays it as an image
It was based on the Learner.show_results()
.
It works perfectly fine when before/after the training ends,
but while fit_one_cycle()
running, the Google Colab keeps getting stuck.
It looks like there is an endless loop or what.
Here’s the tracebook. Any idea what could I do to solve this problem?
41 frames
/usr/local/lib/python3.7/dist-packages/fastai/callback/schedule.py in fit_one_cycle(self, n_epoch, lr_max, div, div_final, pct_start, wd, moms, cbs, reset_opt)
114 scheds = {'lr': combined_cos(pct_start, lr_max/div, lr_max, lr_max/div_final),
115 'mom': combined_cos(pct_start, *(self.moms if moms is None else moms))}
--> 116 self.fit(n_epoch, cbs=ParamScheduler(scheds)+L(cbs), reset_opt=reset_opt, wd=wd)
117
118 # Cell
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in fit(self, n_epoch, lr, wd, cbs, reset_opt)
220 self.opt.set_hypers(lr=self.lr if lr is None else lr)
221 self.n_epoch = n_epoch
--> 222 self._with_events(self._do_fit, 'fit', CancelFitException, self._end_cleanup)
223
224 def _end_cleanup(self): self.dl,self.xb,self.yb,self.pred,self.loss = None,(None,),(None,),None,None
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
162
163 def _with_events(self, f, event_type, ex, final=noop):
--> 164 try: self(f'before_{event_type}'); f()
165 except ex: self(f'after_cancel_{event_type}')
166 self(f'after_{event_type}'); final()
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in _do_fit(self)
211 for epoch in range(self.n_epoch):
212 self.epoch=epoch
--> 213 self._with_events(self._do_epoch, 'epoch', CancelEpochException)
214
215 def fit(self, n_epoch, lr=None, wd=None, cbs=None, reset_opt=False):
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in _with_events(self, f, event_type, ex, final)
164 try: self(f'before_{event_type}'); f()
165 except ex: self(f'after_cancel_{event_type}')
--> 166 self(f'after_{event_type}'); final()
167
168 def all_batches(self):
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in __call__(self, event_name)
140
141 def ordered_cbs(self, event): return [cb for cb in self.cbs.sorted('order') if hasattr(cb, event)]
--> 142 def __call__(self, event_name): L(event_name).map(self._call_one)
143
144 def _call_one(self, event_name):
/usr/local/lib/python3.7/dist-packages/fastcore/foundation.py in map(self, f, gen, *args, **kwargs)
153 def range(cls, a, b=None, step=None): return cls(range_of(a, b=b, step=step))
154
--> 155 def map(self, f, *args, gen=False, **kwargs): return self._new(map_ex(self, f, *args, gen=gen, **kwargs))
156 def argwhere(self, f, negate=False, **kwargs): return self._new(argwhere(self, f, negate, **kwargs))
157 def argfirst(self, f, negate=False): return first(i for i,o in self.enumerate() if f(o))
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in map_ex(iterable, f, gen, *args, **kwargs)
777 res = map(g, iterable)
778 if gen: return res
--> 779 return list(res)
780
781 # Cell
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in __call__(self, *args, **kwargs)
762 if isinstance(v,_Arg): kwargs[k] = args.pop(v.i)
763 fargs = [args[x.i] if isinstance(x, _Arg) else x for x in self.pargs] + args[self.maxi+1:]
--> 764 return self.func(*fargs, **kwargs)
765
766 # Cell
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in _call_one(self, event_name)
144 def _call_one(self, event_name):
145 if not hasattr(event, event_name): raise Exception(f'missing {event_name}')
--> 146 for cb in self.cbs.sorted('order'): cb(event_name)
147
148 def _bn_bias_state(self, with_bias): return norm_bias_params(self.model, with_bias).map(self.opt.state)
/usr/local/lib/python3.7/dist-packages/fastai/callback/core.py in __call__(self, event_name)
55 res = None
56 if self.run and _run:
---> 57 try: res = getattr(self, event_name, noop)()
58 except (CancelBatchException, CancelEpochException, CancelFitException, CancelStepException, CancelTrainException, CancelValidException): raise
59 except Exception as e:
<ipython-input-23-a2093953dc27> in after_epoch(self, **kwargs)
6 b=dl.one_batch()
7 try:
----> 8 _,_,prd=self.get_preds(dl=[b],with_decoded=True)
9 except TypeError as e:
10 raise TypeError(f"problem with get_preds")
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in get_preds(self, ds_idx, dl, with_input, with_decoded, with_loss, act, inner, reorder, cbs, **kwargs)
262 if with_decoded: res.insert(pred_i+2, getattr(self.loss_func, 'decodes', noop)(res[pred_i]))
263 if reorder and hasattr(dl, 'get_idxs'): res = nested_reorder(res, tensor(idxs).argsort())
--> 264 return tuple(res)
265 self._end_cleanup()
266
/usr/local/lib/python3.7/dist-packages/fastcore/xtras.py in __exit__(self, *args, **kwargs)
493 def __init__(self, mgrs): self.default,self.stack = L(mgrs),ExitStack()
494 def __enter__(self): self.default.map(self.stack.enter_context)
--> 495 def __exit__(self, *args, **kwargs): self.stack.__exit__(*args, **kwargs)
496
497 # Cell
/usr/lib/python3.7/contextlib.py in __exit__(self, *exc_details)
522 # set-up context
523 fixed_ctx = exc_details[1].__context__
--> 524 raise exc_details[1]
525 except BaseException:
526 exc_details[1].__context__ = fixed_ctx
/usr/lib/python3.7/contextlib.py in __exit__(self, *exc_details)
507 assert is_sync
508 try:
--> 509 if cb(*exc_details):
510 suppressed_exc = True
511 pending_raise = False
/usr/lib/python3.7/contextlib.py in _exit_wrapper(exc_type, exc, tb)
375 def _create_exit_wrapper(cm, cm_exit):
376 def _exit_wrapper(exc_type, exc, tb):
--> 377 return cm_exit(cm, exc_type, exc, tb)
378 return _exit_wrapper
379
/usr/local/lib/python3.7/dist-packages/fastcore/xtras.py in __exit__(self, *args, **kwargs)
493 def __init__(self, mgrs): self.default,self.stack = L(mgrs),ExitStack()
494 def __enter__(self): self.default.map(self.stack.enter_context)
--> 495 def __exit__(self, *args, **kwargs): self.stack.__exit__(*args, **kwargs)
496
497 # Cell
/usr/lib/python3.7/contextlib.py in __exit__(self, *exc_details)
522 # set-up context
523 fixed_ctx = exc_details[1].__context__
--> 524 raise exc_details[1]
525 except BaseException:
526 exc_details[1].__context__ = fixed_ctx
/usr/lib/python3.7/contextlib.py in __exit__(self, type, value, traceback)
128 value = type()
129 try:
--> 130 self.gen.throw(type, value, traceback)
131 except StopIteration as exc:
132 # Suppress StopIteration *unless* it's the same exception that
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in replacing_yield(o, attr, val)
22 "Context manager to temporarily replace an attribute"
23 old = getattr(o,attr)
---> 24 try: yield setattr(o,attr,val)
25 finally: setattr(o,attr,old)
26
/usr/lib/python3.7/contextlib.py in __exit__(self, *exc_details)
507 assert is_sync
508 try:
--> 509 if cb(*exc_details):
510 suppressed_exc = True
511 pending_raise = False
/usr/lib/python3.7/contextlib.py in _exit_wrapper(exc_type, exc, tb)
375 def _create_exit_wrapper(cm, cm_exit):
376 def _exit_wrapper(exc_type, exc, tb):
--> 377 return cm_exit(cm, exc_type, exc, tb)
378 return _exit_wrapper
379
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in __exit__(self, exc_type, exc_value, tb)
224 def _end_cleanup(self): self.dl,self.xb,self.yb,self.pred,self.loss = None,(None,),(None,),None,None
225 def __enter__(self): self(_before_epoch); return self
--> 226 def __exit__(self, exc_type, exc_value, tb): self(_after_epoch)
227
228 def validation_context(self, cbs=None, inner=False):
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in __call__(self, event_name)
140
141 def ordered_cbs(self, event): return [cb for cb in self.cbs.sorted('order') if hasattr(cb, event)]
--> 142 def __call__(self, event_name): L(event_name).map(self._call_one)
143
144 def _call_one(self, event_name):
/usr/local/lib/python3.7/dist-packages/fastcore/foundation.py in map(self, f, gen, *args, **kwargs)
153 def range(cls, a, b=None, step=None): return cls(range_of(a, b=b, step=step))
154
--> 155 def map(self, f, *args, gen=False, **kwargs): return self._new(map_ex(self, f, *args, gen=gen, **kwargs))
156 def argwhere(self, f, negate=False, **kwargs): return self._new(argwhere(self, f, negate, **kwargs))
157 def argfirst(self, f, negate=False): return first(i for i,o in self.enumerate() if f(o))
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in map_ex(iterable, f, gen, *args, **kwargs)
777 res = map(g, iterable)
778 if gen: return res
--> 779 return list(res)
780
781 # Cell
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in __call__(self, *args, **kwargs)
762 if isinstance(v,_Arg): kwargs[k] = args.pop(v.i)
763 fargs = [args[x.i] if isinstance(x, _Arg) else x for x in self.pargs] + args[self.maxi+1:]
--> 764 return self.func(*fargs, **kwargs)
765
766 # Cell
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in _call_one(self, event_name)
144 def _call_one(self, event_name):
145 if not hasattr(event, event_name): raise Exception(f'missing {event_name}')
--> 146 for cb in self.cbs.sorted('order'): cb(event_name)
147
148 def _bn_bias_state(self, with_bias): return norm_bias_params(self.model, with_bias).map(self.opt.state)
/usr/local/lib/python3.7/dist-packages/fastai/callback/core.py in __call__(self, event_name)
55 res = None
56 if self.run and _run:
---> 57 try: res = getattr(self, event_name, noop)()
58 except (CancelBatchException, CancelEpochException, CancelFitException, CancelStepException, CancelTrainException, CancelValidException): raise
59 except Exception as e:
<ipython-input-23-a2093953dc27> in after_epoch(self, **kwargs)
6 b=dl.one_batch()
7 try:
----> 8 _,_,prd=self.get_preds(dl=[b],with_decoded=True)
9 except TypeError as e:
10 raise TypeError(f"problem with get_preds")
/usr/local/lib/python3.7/dist-packages/fastai/learner.py in get_preds(self, ds_idx, dl, with_input, with_decoded, with_loss, act, inner, reorder, cbs, **kwargs)
253 ctx_mgrs = self.validation_context(cbs=L(cbs)+[cb], inner=inner)
254 if with_loss: ctx_mgrs.append(self.loss_not_reduced())
--> 255 with ContextManagers(ctx_mgrs):
256 self._do_epoch_validate(dl=dl)
257 if act is None: act = getattr(self.loss_func, 'activation', noop)
/usr/local/lib/python3.7/dist-packages/fastcore/xtras.py in __enter__(self)
492 "Wrapper for `contextlib.ExitStack` which enters a collection of context managers"
493 def __init__(self, mgrs): self.default,self.stack = L(mgrs),ExitStack()
--> 494 def __enter__(self): self.default.map(self.stack.enter_context)
495 def __exit__(self, *args, **kwargs): self.stack.__exit__(*args, **kwargs)
496
/usr/local/lib/python3.7/dist-packages/fastcore/foundation.py in map(self, f, gen, *args, **kwargs)
153 def range(cls, a, b=None, step=None): return cls(range_of(a, b=b, step=step))
154
--> 155 def map(self, f, *args, gen=False, **kwargs): return self._new(map_ex(self, f, *args, gen=gen, **kwargs))
156 def argwhere(self, f, negate=False, **kwargs): return self._new(argwhere(self, f, negate, **kwargs))
157 def argfirst(self, f, negate=False): return first(i for i,o in self.enumerate() if f(o))
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in map_ex(iterable, f, gen, *args, **kwargs)
777 res = map(g, iterable)
778 if gen: return res
--> 779 return list(res)
780
781 # Cell
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in __call__(self, *args, **kwargs)
762 if isinstance(v,_Arg): kwargs[k] = args.pop(v.i)
763 fargs = [args[x.i] if isinstance(x, _Arg) else x for x in self.pargs] + args[self.maxi+1:]
--> 764 return self.func(*fargs, **kwargs)
765
766 # Cell
/usr/lib/python3.7/contextlib.py in enter_context(self, cm)
425 _cm_type = type(cm)
426 _exit = _cm_type.__exit__
--> 427 result = _cm_type.__enter__(cm)
428 self._push_cm_exit(cm, _exit)
429 return result
/usr/local/lib/python3.7/dist-packages/fastcore/xtras.py in __enter__(self)
492 "Wrapper for `contextlib.ExitStack` which enters a collection of context managers"
493 def __init__(self, mgrs): self.default,self.stack = L(mgrs),ExitStack()
--> 494 def __enter__(self): self.default.map(self.stack.enter_context)
495 def __exit__(self, *args, **kwargs): self.stack.__exit__(*args, **kwargs)
496
/usr/local/lib/python3.7/dist-packages/fastcore/foundation.py in map(self, f, gen, *args, **kwargs)
153 def range(cls, a, b=None, step=None): return cls(range_of(a, b=b, step=step))
154
--> 155 def map(self, f, *args, gen=False, **kwargs): return self._new(map_ex(self, f, *args, gen=gen, **kwargs))
156 def argwhere(self, f, negate=False, **kwargs): return self._new(argwhere(self, f, negate, **kwargs))
157 def argfirst(self, f, negate=False): return first(i for i,o in self.enumerate() if f(o))
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in map_ex(iterable, f, gen, *args, **kwargs)
777 res = map(g, iterable)
778 if gen: return res
--> 779 return list(res)
780
781 # Cell
/usr/local/lib/python3.7/dist-packages/fastcore/basics.py in __call__(self, *args, **kwargs)
762 if isinstance(v,_Arg): kwargs[k] = args.pop(v.i)
763 fargs = [args[x.i] if isinstance(x, _Arg) else x for x in self.pargs] + args[self.maxi+1:]
--> 764 return self.func(*fargs, **kwargs)
765
766 # Cell
/usr/lib/python3.7/contextlib.py in enter_context(self, cm)
425 _cm_type = type(cm)
426 _exit = _cm_type.__exit__
--> 427 result = _cm_type.__enter__(cm)
428 self._push_cm_exit(cm, _exit)
429 return result