Updated literature study and validation set for autoregressive models
This commit is contained in:
@@ -176,22 +176,22 @@ class AutoRegressiveQuantileTrainer(AutoRegressiveTrainer):
|
||||
|
||||
crps_from_samples_metric.append(crps[0].mean().item())
|
||||
|
||||
if epoch is not None:
|
||||
if epoch is not None and task is not None:
|
||||
task.get_logger().report_scalar(
|
||||
title="CRPS_from_samples",
|
||||
series="test",
|
||||
series="val",
|
||||
value=np.mean(crps_from_samples_metric),
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
# using the policy evaluator, evaluate the policy with the generated samples
|
||||
if self.policy_evaluator is not None:
|
||||
if self.policy_evaluator is not None and epoch != -1:
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
self.policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=generated_samples,
|
||||
test_loader=dataloader,
|
||||
initial_penalty=900,
|
||||
target_charge_cycles=283,
|
||||
target_charge_cycles=58 * 400 / 356,
|
||||
initial_learning_rate=5,
|
||||
max_iterations=100,
|
||||
tolerance=1,
|
||||
@@ -205,22 +205,30 @@ class AutoRegressiveQuantileTrainer(AutoRegressiveTrainer):
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Penalty",
|
||||
series="test",
|
||||
series="val",
|
||||
value=optimal_penalty,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Profit", series="test", value=profit, iteration=epoch
|
||||
title="Optimal Profit", series="val", value=profit, iteration=epoch
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Charge Cycles",
|
||||
series="test",
|
||||
series="val",
|
||||
value=charge_cycles,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
return (
|
||||
np.mean(crps_from_samples_metric),
|
||||
profit,
|
||||
charge_cycles,
|
||||
optimal_penalty,
|
||||
generated_samples,
|
||||
)
|
||||
|
||||
return np.mean(crps_from_samples_metric), generated_samples
|
||||
|
||||
def log_final_metrics(self, task, dataloader, train: bool = True):
|
||||
|
||||
@@ -148,19 +148,6 @@ class Trainer:
|
||||
running_loss /= len(train_loader.dataset)
|
||||
test_loss = self.test(val_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 task:
|
||||
task.get_logger().report_scalar(
|
||||
title=self.criterion.__class__.__name__,
|
||||
@@ -194,7 +181,20 @@ class Trainer:
|
||||
# )
|
||||
|
||||
if hasattr(self, "calculate_crps_from_samples"):
|
||||
self.calculate_crps_from_samples(task, val_loader, epoch)
|
||||
_, profit, charge_cycles, penalty, _ = self.calculate_crps_from_samples(task, val_loader, epoch)
|
||||
|
||||
if self.patience is not None:
|
||||
if (
|
||||
self.best_score is None
|
||||
or profit > self.best_score
|
||||
):
|
||||
self.save_checkpoint(profit, task, epoch)
|
||||
counter = 0
|
||||
else:
|
||||
counter += 1
|
||||
if counter >= self.patience:
|
||||
print("Early stopping triggered")
|
||||
break
|
||||
|
||||
if task:
|
||||
self.finish_training(task=task)
|
||||
|
||||
@@ -3,7 +3,7 @@ from src.utils.clearml import ClearMLHelper
|
||||
#### ClearML ####
|
||||
clearml_helper = ClearMLHelper(project_name="Thesis/NrvForecast")
|
||||
task = clearml_helper.get_task(
|
||||
task_name="AQR: GRU (8 - 512) + Load + Wind + PV + QE + NP"
|
||||
task_name="AQR: Non-Linear (4 - 512) + Load + Wind + PV + QE + NP"
|
||||
)
|
||||
task.execute_remotely(queue_name="default", exit_process=True)
|
||||
|
||||
@@ -46,7 +46,7 @@ data_config.NOMINAL_NET_POSITION = True
|
||||
|
||||
data_config = task.connect(data_config, name="data_features")
|
||||
|
||||
data_processor = DataProcessor(data_config, path="", lstm=True)
|
||||
data_processor = DataProcessor(data_config, path="", lstm=False)
|
||||
data_processor.set_batch_size(512)
|
||||
data_processor.set_full_day_skip(False)
|
||||
|
||||
@@ -70,7 +70,7 @@ else:
|
||||
model_parameters = {
|
||||
"learning_rate": 0.0001,
|
||||
"hidden_size": 512,
|
||||
"num_layers": 8,
|
||||
"num_layers": 4,
|
||||
"dropout": 0.2,
|
||||
"time_feature_embedding": 5,
|
||||
}
|
||||
@@ -83,25 +83,25 @@ time_embedding = TimeEmbedding(
|
||||
|
||||
# time_embedding = TrigonometricTimeEmbedding(data_processor.get_time_feature_size())
|
||||
|
||||
lstm_model = GRUModel(
|
||||
time_embedding.output_dim(inputDim),
|
||||
len(quantiles),
|
||||
hidden_size=model_parameters["hidden_size"],
|
||||
num_layers=model_parameters["num_layers"],
|
||||
dropout=model_parameters["dropout"],
|
||||
)
|
||||
|
||||
# non_linear_model = NonLinearRegression(
|
||||
# lstm_model = GRUModel(
|
||||
# time_embedding.output_dim(inputDim),
|
||||
# len(quantiles),
|
||||
# hiddenSize=model_parameters["hidden_size"],
|
||||
# numLayers=model_parameters["num_layers"],
|
||||
# hidden_size=model_parameters["hidden_size"],
|
||||
# num_layers=model_parameters["num_layers"],
|
||||
# dropout=model_parameters["dropout"],
|
||||
# )
|
||||
|
||||
non_linear_model = NonLinearRegression(
|
||||
time_embedding.output_dim(inputDim),
|
||||
len(quantiles),
|
||||
hiddenSize=model_parameters["hidden_size"],
|
||||
numLayers=model_parameters["num_layers"],
|
||||
dropout=model_parameters["dropout"],
|
||||
)
|
||||
|
||||
# linear_model = LinearRegression(time_embedding.output_dim(inputDim), len(quantiles))
|
||||
|
||||
model = nn.Sequential(time_embedding, lstm_model)
|
||||
model = nn.Sequential(time_embedding, non_linear_model)
|
||||
|
||||
model.output_size = 1
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=model_parameters["learning_rate"])
|
||||
@@ -119,16 +119,16 @@ trainer = AutoRegressiveQuantileTrainer(
|
||||
data_processor,
|
||||
quantiles,
|
||||
"cuda",
|
||||
policy_evaluator=None,
|
||||
policy_evaluator=policy_evaluator,
|
||||
debug=False,
|
||||
)
|
||||
|
||||
trainer.add_metrics_to_track(
|
||||
[PinballLoss(quantiles), MSELoss(), L1Loss(), CRPSLoss(quantiles)]
|
||||
)
|
||||
trainer.early_stopping(patience=25)
|
||||
trainer.plot_every(15)
|
||||
trainer.train(task=task, epochs=epochs, remotely=True)
|
||||
trainer.early_stopping(patience=6)
|
||||
trainer.plot_every(4)
|
||||
trainer.train(task=task, epochs=epochs, remotely=False)
|
||||
|
||||
### Policy Evaluation ###
|
||||
idx_samples = trainer.test_set_samples
|
||||
|
||||
Reference in New Issue
Block a user