diff --git a/src/notebooks/training.py b/src/notebooks/training.py new file mode 100644 index 0000000..c0d4d0f --- /dev/null +++ b/src/notebooks/training.py @@ -0,0 +1,69 @@ +from src.data import DataProcessor, DataConfig +from src.trainers.quantile_trainer import AutoRegressiveQuantileTrainer, NonAutoRegressiveQuantileRegression +from src.trainers.probabilistic_baseline import ProbabilisticBaselineTrainer +from src.trainers.autoregressive_trainer import AutoRegressiveTrainer +from src.trainers.trainer import Trainer +from src.utils.clearml import ClearMLHelper +from src.models import * +from src.losses import * +import torch +import numpy as np +from torch.nn import MSELoss, L1Loss +from datetime import datetime +import torch.nn as nn +from src.models.time_embedding_layer import TimeEmbedding + + +#### ClearML #### +clearml_helper = ClearMLHelper(project_name="Thesis/NrvForecast") + +#### Data Processor #### +data_config = DataConfig() +data_config.NRV_HISTORY = True +data_config.LOAD_HISTORY = False +data_config.LOAD_FORECAST = False + +data_config.WIND_FORECAST = False +data_config.WIND_HISTORY = False + +data_config.QUARTER = True +data_config.DAY_OF_WEEK = False + +data_processor = DataProcessor(data_config, path="") +data_processor.set_batch_size(1024) +data_processor.set_full_day_skip(False) + + +#### Hyperparameters #### +data_processor.set_output_size(1) +inputDim = data_processor.get_input_size() +learningRate = 0.0001 +epochs = 100 + +# quantiles = torch.tensor([0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99]).to("cuda") +quantiles = torch.tensor( + [0.01, 0.05, 0.1, 0.15, 0.3, 0.4, 0.5, 0.6, 0.7, 0.85, 0.9, 0.95, 0.99] +).to("cuda") + +# model = LinearRegression(inputDim, len(quantiles)) +time_embedding = TimeEmbedding(data_processor.get_time_feature_size(), 4) +non_linear_regression_model = NonLinearRegression(time_embedding.output_dim(inputDim), len(quantiles), hiddenSize=1024, numLayers=5) +model = nn.Sequential(time_embedding, non_linear_regression_model) +optimizer = torch.optim.Adam(model.parameters(), lr=learningRate) + +#### Trainer #### +trainer = AutoRegressiveQuantileTrainer( + model, + optimizer, + data_processor, + quantiles, + "cuda", + debug=True, + clearml_helper=clearml_helper, +) +trainer.add_metrics_to_track( + [PinballLoss(quantiles), MSELoss(), L1Loss(), CRPSLoss(quantiles)] +) +trainer.early_stopping(patience=10) +trainer.plot_every(5) +trainer.train(epochs=epochs, remotely=True) \ No newline at end of file diff --git a/src/utils/clearml.py b/src/utils/clearml.py index 42cb997..825c283 100644 --- a/src/utils/clearml.py +++ b/src/utils/clearml.py @@ -5,7 +5,7 @@ class ClearMLHelper: self.project_name = project_name def get_task(self, task_name: str = "Model Training"): - Task.add_requirements("../../requirements.txt") + Task.add_requirements("requirements.txt") Task.ignore_requirements("torch") Task.ignore_requirements("torchvision") Task.ignore_requirements("tensorboard")