Implemented Non Autorgressive Quantile Regression
This commit is contained in:
@@ -67,6 +67,8 @@ class Trainer:
|
||||
task.connect(self.criterion, name="criterion")
|
||||
task.connect(self.data_processor, name="data_processor")
|
||||
|
||||
task.connect(self.data_processor.data_config, name="data_features")
|
||||
|
||||
return task
|
||||
|
||||
def random_samples(self, train: bool = True, num_samples: int = 10):
|
||||
@@ -82,58 +84,68 @@ class Trainer:
|
||||
|
||||
|
||||
def train(self, epochs: int):
|
||||
train_loader, test_loader = self.data_processor.get_dataloaders(predict_sequence_length=self.model.output_size)
|
||||
try:
|
||||
train_loader, test_loader = self.data_processor.get_dataloaders(predict_sequence_length=self.model.output_size)
|
||||
|
||||
train_samples = self.random_samples(train=True)
|
||||
test_samples = self.random_samples(train=False)
|
||||
train_samples = self.random_samples(train=True)
|
||||
test_samples = self.random_samples(train=False)
|
||||
|
||||
task = self.init_clearml_task()
|
||||
task = self.init_clearml_task()
|
||||
|
||||
self.best_score = None
|
||||
counter = 0
|
||||
self.best_score = None
|
||||
counter = 0
|
||||
|
||||
for epoch in range(1, epochs + 1):
|
||||
self.model.train()
|
||||
running_loss = 0.0
|
||||
for epoch in range(1, epochs + 1):
|
||||
self.model.train()
|
||||
running_loss = 0.0
|
||||
|
||||
for inputs, targets in train_loader:
|
||||
inputs, targets = inputs.to(self.device), targets.to(self.device)
|
||||
for inputs, targets in train_loader:
|
||||
inputs, targets = inputs.to(self.device), targets.to(self.device)
|
||||
|
||||
self.optimizer.zero_grad()
|
||||
output = self.model(inputs)
|
||||
self.optimizer.zero_grad()
|
||||
output = self.model(inputs)
|
||||
|
||||
loss = self.criterion(output, targets)
|
||||
loss.backward()
|
||||
self.optimizer.step()
|
||||
loss = self.criterion(output, targets)
|
||||
loss.backward()
|
||||
self.optimizer.step()
|
||||
|
||||
running_loss += loss.item()
|
||||
|
||||
running_loss += loss.item()
|
||||
|
||||
|
||||
running_loss /= len(train_loader.dataset)
|
||||
test_loss = self.test(test_loader)
|
||||
running_loss /= len(train_loader.dataset)
|
||||
test_loss = self.test(test_loader)
|
||||
|
||||
if self.patience is not None:
|
||||
if self.best_score is None or test_loss < self.best_score + self.delta:
|
||||
self.save_checkpoint(test_loss, task, epoch)
|
||||
counter = 0
|
||||
else:
|
||||
counter += 1
|
||||
if counter >= self.patience:
|
||||
print('Early stopping triggered')
|
||||
break
|
||||
if self.patience is not None:
|
||||
if self.best_score is None or test_loss < self.best_score + self.delta:
|
||||
self.save_checkpoint(test_loss, task, epoch)
|
||||
counter = 0
|
||||
else:
|
||||
counter += 1
|
||||
if counter >= self.patience:
|
||||
print('Early stopping triggered')
|
||||
break
|
||||
|
||||
if task:
|
||||
task.get_logger().report_scalar(title=self.criterion.__class__.__name__, series="train", value=running_loss, iteration=epoch)
|
||||
task.get_logger().report_scalar(title=self.criterion.__class__.__name__, series="test", value=test_loss, iteration=epoch)
|
||||
|
||||
|
||||
if epoch % self.plot_every_n_epochs == 0:
|
||||
self.debug_plots(task, True, train_loader, train_samples, epoch)
|
||||
self.debug_plots(task, False, test_loader, test_samples, epoch)
|
||||
|
||||
if hasattr(self, 'plot_quantile_percentages'):
|
||||
self.plot_quantile_percentages(task, train_loader, True, epoch)
|
||||
self.plot_quantile_percentages(task, test_loader, False, epoch)
|
||||
|
||||
if task:
|
||||
task.get_logger().report_scalar(title=self.criterion.__class__.__name__, series="train", value=running_loss, iteration=epoch)
|
||||
task.get_logger().report_scalar(title=self.criterion.__class__.__name__, series="test", value=test_loss, iteration=epoch)
|
||||
|
||||
|
||||
if epoch % self.plot_every_n_epochs == 0:
|
||||
self.debug_plots(task, True, train_loader, train_samples, epoch)
|
||||
self.debug_plots(task, False, test_loader, test_samples, epoch)
|
||||
|
||||
if task:
|
||||
self.finish_training(task=task)
|
||||
task.close()
|
||||
self.finish_training(task=task)
|
||||
task.close()
|
||||
except Exception:
|
||||
if task:
|
||||
task.close()
|
||||
task.set_archived(True)
|
||||
raise
|
||||
|
||||
|
||||
def log_final_metrics(self, task, dataloader, train: bool = True):
|
||||
@@ -178,10 +190,12 @@ class Trainer:
|
||||
self.model.load_state_dict(torch.load('checkpoint.pt'))
|
||||
self.model.eval()
|
||||
|
||||
transformed_train_loader, transformed_test_loader = self.data_processor.get_dataloaders(predict_sequence_length=self.model.output_size)
|
||||
train_loader, test_loader = self.data_processor.get_dataloaders(predict_sequence_length=self.model.output_size)
|
||||
|
||||
# self.log_final_metrics(task, transformed_train_loader, train=True)
|
||||
self.log_final_metrics(task, transformed_test_loader, train=False)
|
||||
if not hasattr(self, 'plot_quantile_percentages'):
|
||||
self.log_final_metrics(task, train_loader, train=True)
|
||||
|
||||
self.log_final_metrics(task, test_loader, train=False)
|
||||
|
||||
|
||||
def test(self, test_loader: torch.utils.data.DataLoader):
|
||||
@@ -242,9 +256,9 @@ class Trainer:
|
||||
fig.add_trace(trace, row=row, col=col)
|
||||
|
||||
|
||||
loss = self.criterion(predictions.to(self.device), target.squeeze(-1).to(self.device)).item()
|
||||
# loss = self.criterion(predictions.to(self.device), target.squeeze(-1).to(self.device)).item()
|
||||
|
||||
fig['layout']['annotations'][i].update(text=f"{loss.__class__.__name__}: {loss:.6f}")
|
||||
# fig['layout']['annotations'][i].update(text=f"{loss.__class__.__name__}: {loss:.6f}")
|
||||
|
||||
# y axis same for all plots
|
||||
fig.update_yaxes(range=[-1, 1], col=1)
|
||||
|
||||
Reference in New Issue
Block a user