Compare commits

...
13 Commits
5 changed files with 22 additions and 15 deletions
+18 -11
View File
@@ -86,7 +86,7 @@ class Trainer(TrainerIO):
self.test_percent_check = overfit_pct
def __is_function_implemented(self, f_name):
f_op = getattr(self, f_name, None)
f_op = getattr(self.model, f_name, None)
return callable(f_op)
@property
@@ -195,6 +195,7 @@ class Trainer(TrainerIO):
# -----------------------------
def fit(self, model):
self.model = model
model.trainer = self
# transfer data loaders from model
self.__get_dataloaders(model)
@@ -266,28 +267,25 @@ class Trainer(TrainerIO):
if met_batch_limit:
break
# give model a chance to end epoch early
if self.model.should_stop_epoch(data_batch):
break
# ---------------
# RUN TRAIN STEP
# ---------------
self.__run_tng_batch(data_batch)
batch_result = self.__run_tng_batch(data_batch)
early_stop_epoch = batch_result == -1
# ---------------
# RUN VAL STEP
# ---------------
is_val_check_batch = (batch_nb + 1) % self.val_check_batch == 0
if self.fast_dev_run or is_val_check_batch:
if self.fast_dev_run or is_val_check_batch or early_stop_epoch:
self.__run_validation()
# when batch should be saved
if (batch_nb + 1) % self.log_save_interval == 0:
if (batch_nb + 1) % self.log_save_interval == 0 or early_stop_epoch:
self.experiment.save()
# when metrics should be logged
if batch_nb % self.add_log_row_interval == 0:
if batch_nb % self.add_log_row_interval == 0 or early_stop_epoch:
# count items in memory
# nb_params, nb_tensors = count_mem_items()
@@ -311,6 +309,10 @@ class Trainer(TrainerIO):
if self.__is_function_implemented('on_batch_end'):
self.model.on_batch_end()
# end epoch early
if early_stop_epoch:
break
# hook
if self.__is_function_implemented('on_epoch_end'):
self.model.on_epoch_end()
@@ -325,13 +327,16 @@ class Trainer(TrainerIO):
if stop:
return
def __run_tng_batch(self, data_batch):
if data_batch is None:
return
return 0
# hook
if self.__is_function_implemented('on_batch_start'):
self.model.on_batch_start()
response = self.model.on_batch_start(data_batch)
if response == -1:
return -1
if self.enable_tqdm:
self.prog_bar.update(1)
@@ -373,6 +378,8 @@ class Trainer(TrainerIO):
if self.__is_function_implemented('on_batch_end'):
self.model.on_batch_end()
return 0
def __run_validation(self):
# decide if can check epochs
can_check_epoch = (self.current_epoch + 1) % self.check_val_every_n_epoch == 0
+1 -3
View File
@@ -1,7 +1,7 @@
import torch
class ModelHooks(torch.nn.Module):
def on_batch_start(self):
def on_batch_start(self, data_batch):
pass
def on_batch_end(self):
@@ -19,5 +19,3 @@ class ModelHooks(torch.nn.Module):
def on_post_performance_check(self):
pass
def should_stop_epoch(self, data_batch):
return False
@@ -88,6 +88,7 @@ class TrainerIO(object):
self.early_stop_callback.wait = checkpoint['early_stop_callback_wait']
self.early_stop_callback.patience = checkpoint['early_stop_callback_patience']
self.global_step = checkpoint['global_step']
self.current_epoch = checkpoint['epoch']
# restore the optimizers
optimizer_states = checkpoint['optimizer_states']
@@ -24,6 +24,7 @@ class RootModule(GradInformation, ModelIO, OptimizerConfig, ModelHooks):
self.overfit = hparams.overfit
self.gradient_clip = hparams.gradient_clip
self.num = 2
self.trainer = None
# track if gpu was requested for checkpointing
self.on_gpu = False
+1 -1
View File
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
# http://blog.ionelmc.ro/2014/05/25/python-packaging/
setup(
name="pytorch-lightning",
version='0.1.dev12',
version='0.1.dev16',
description="The Keras for ML researchers using PyTorch",
author="William Falcon",
author_email="waf2107@columbia.edu",