From 7f55ea63b6b4b0028b886572fbd4f62cc030d361 Mon Sep 17 00:00:00 2001 From: ET <57718207+turbotimon@users.noreply.github.com> Date: Tue, 26 Sep 2023 08:54:54 +0000 Subject: [PATCH 1/5] improve plot_loss --- fastai/learner.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fastai/learner.py b/fastai/learner.py index dabee8898e..c37b7fb45b 100644 --- a/fastai/learner.py +++ b/fastai/learner.py @@ -594,13 +594,25 @@ def _valid_mets(self): if getattr(self, 'cancel_valid', False): return L() return (L(self.loss) + self.metrics if self.valid_metrics else L()) - def plot_loss(self, skip_start=5, with_valid=True): - plt.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + def plot_loss(self, skip_start=5, with_valid=True, log=False, show_epochs=False, ax=None): + if not ax: + ax=plt.gca() + if log: + ax.loglog(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + else: + ax.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + if show_epochs: + for x in self.iters: + ax.axvline(x, color='grey', ls=':') + ax.set_ylabel('loss') + ax.set_xlabel('steps') + ax.set_title('learning curve') if with_valid: idx = (np.array(self.iters) Date: Mon, 16 Oct 2023 16:23:48 +0000 Subject: [PATCH 2/5] move changes to nbs --- fastai/learner.py | 22 +++++----------------- nbs/13a_learner.ipynb | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/fastai/learner.py b/fastai/learner.py index c37b7fb45b..dabee8898e 100644 --- a/fastai/learner.py +++ b/fastai/learner.py @@ -594,25 +594,13 @@ def _valid_mets(self): if getattr(self, 'cancel_valid', False): return L() return (L(self.loss) + self.metrics if self.valid_metrics else L()) - def plot_loss(self, skip_start=5, with_valid=True, log=False, show_epochs=False, ax=None): - if not ax: - ax=plt.gca() - if log: - ax.loglog(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') - else: - ax.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') - if show_epochs: - for x in self.iters: - ax.axvline(x, color='grey', ls=':') - ax.set_ylabel('loss') - ax.set_xlabel('steps') - ax.set_title('learning curve') + def plot_loss(self, skip_start=5, with_valid=True): + plt.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') if with_valid: idx = (np.array(self.iters) Date: Tue, 17 Oct 2023 08:04:28 +0000 Subject: [PATCH 3/5] run nbdev_export --- fastai/_modidx.py | 2 +- fastai/learner.py | 22 +++++++++++++++++----- fastai/metrics.py | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/fastai/_modidx.py b/fastai/_modidx.py index f86fda8c9f..2bea67ec8a 100644 --- a/fastai/_modidx.py +++ b/fastai/_modidx.py @@ -2691,4 +2691,4 @@ 'fastai.vision.widgets._update_children': ( 'vision.widgets.html#_update_children', 'fastai/vision/widgets.py'), 'fastai.vision.widgets.carousel': ('vision.widgets.html#carousel', 'fastai/vision/widgets.py'), - 'fastai.vision.widgets.widget': ('vision.widgets.html#widget', 'fastai/vision/widgets.py')}}} + 'fastai.vision.widgets.widget': ('vision.widgets.html#widget', 'fastai/vision/widgets.py')}}} \ No newline at end of file diff --git a/fastai/learner.py b/fastai/learner.py index dabee8898e..c37b7fb45b 100644 --- a/fastai/learner.py +++ b/fastai/learner.py @@ -594,13 +594,25 @@ def _valid_mets(self): if getattr(self, 'cancel_valid', False): return L() return (L(self.loss) + self.metrics if self.valid_metrics else L()) - def plot_loss(self, skip_start=5, with_valid=True): - plt.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + def plot_loss(self, skip_start=5, with_valid=True, log=False, show_epochs=False, ax=None): + if not ax: + ax=plt.gca() + if log: + ax.loglog(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + else: + ax.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + if show_epochs: + for x in self.iters: + ax.axvline(x, color='grey', ls=':') + ax.set_ylabel('loss') + ax.set_xlabel('steps') + ax.set_title('learning curve') if with_valid: idx = (np.array(self.iters) Date: Thu, 16 Nov 2023 13:30:02 +0000 Subject: [PATCH 4/5] execute nbdev_export (manually reset _modidx.py) --- fastai/learner.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fastai/learner.py b/fastai/learner.py index dabee8898e..c37b7fb45b 100644 --- a/fastai/learner.py +++ b/fastai/learner.py @@ -594,13 +594,25 @@ def _valid_mets(self): if getattr(self, 'cancel_valid', False): return L() return (L(self.loss) + self.metrics if self.valid_metrics else L()) - def plot_loss(self, skip_start=5, with_valid=True): - plt.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + def plot_loss(self, skip_start=5, with_valid=True, log=False, show_epochs=False, ax=None): + if not ax: + ax=plt.gca() + if log: + ax.loglog(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + else: + ax.plot(list(range(skip_start, len(self.losses))), self.losses[skip_start:], label='train') + if show_epochs: + for x in self.iters: + ax.axvline(x, color='grey', ls=':') + ax.set_ylabel('loss') + ax.set_xlabel('steps') + ax.set_title('learning curve') if with_valid: idx = (np.array(self.iters) Date: Thu, 16 Nov 2023 13:40:24 +0000 Subject: [PATCH 5/5] reset _modidx.py --- fastai/_modidx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastai/_modidx.py b/fastai/_modidx.py index 0459768a76..5a1b6f7b33 100644 --- a/fastai/_modidx.py +++ b/fastai/_modidx.py @@ -2691,4 +2691,4 @@ 'fastai.vision.widgets._update_children': ( 'vision.widgets.html#_update_children', 'fastai/vision/widgets.py'), 'fastai.vision.widgets.carousel': ('vision.widgets.html#carousel', 'fastai/vision/widgets.py'), - 'fastai.vision.widgets.widget': ('vision.widgets.html#widget', 'fastai/vision/widgets.py')}}} \ No newline at end of file + 'fastai.vision.widgets.widget': ('vision.widgets.html#widget', 'fastai/vision/widgets.py')}}}