Fixed small summary with model architectures until now
This commit is contained in:
@@ -17,19 +17,18 @@ from src.models.time_embedding_layer import TimeEmbedding
|
||||
|
||||
#### ClearML ####
|
||||
clearml_helper = ClearMLHelper(project_name="Thesis/NrvForecast")
|
||||
task = clearml_helper.get_task(task_name="Autoregressive Quantile Regression")
|
||||
task = clearml_helper.get_task(task_name="Autoregressive Quantile Regression: GRU + Quarter + Load Forecast")
|
||||
|
||||
|
||||
#### Data Processor ####
|
||||
data_config = DataConfig()
|
||||
data_config.NRV_HISTORY = True
|
||||
data_config.LOAD_HISTORY = True
|
||||
data_config.LOAD_FORECAST = True
|
||||
|
||||
data_config.QUARTER = True
|
||||
data_config.DAY_OF_WEEK = True
|
||||
data_config.DAY_OF_WEEK = False
|
||||
|
||||
# data_config = task.connect(data_config, name="data_features")
|
||||
data_config = task.connect(data_config, name="data_features")
|
||||
|
||||
data_processor = DataProcessor(data_config, path="", lstm=True)
|
||||
data_processor.set_batch_size(512)
|
||||
@@ -39,37 +38,49 @@ data_processor.set_full_day_skip(False)
|
||||
#### Hyperparameters ####
|
||||
data_processor.set_output_size(1)
|
||||
inputDim = data_processor.get_input_size()
|
||||
learningRate = 0.001
|
||||
epochs = 100
|
||||
|
||||
print("Input dim: ", inputDim)
|
||||
epochs = 400
|
||||
|
||||
# add parameters to clearml
|
||||
quantiles = task.get_parameter("general/quantiles", cast=True)
|
||||
# make sure it is a list
|
||||
if quantiles is None:
|
||||
quantiles = [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]
|
||||
task.set_parameter("general/quantiles", quantiles)
|
||||
else:
|
||||
# if string, convert to list "[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]""
|
||||
if isinstance(quantiles, str):
|
||||
quantiles = eval(quantiles)
|
||||
|
||||
model_parameters = {
|
||||
"learning_rate": 0.0001,
|
||||
"hidden_size": 512,
|
||||
"num_layers": 2,
|
||||
"dropout": 0.2,
|
||||
"time_feature_embedding": 4,
|
||||
}
|
||||
|
||||
model_parameters = task.connect(model_parameters, name="model_parameters")
|
||||
|
||||
time_embedding = TimeEmbedding(data_processor.get_time_feature_size(), model_parameters["time_feature_embedding"])
|
||||
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"])
|
||||
|
||||
# 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)
|
||||
lstm_model = GRUModel(time_embedding.output_dim(inputDim), len(quantiles), hidden_size=512, num_layers=2)
|
||||
model = nn.Sequential(time_embedding, lstm_model)
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=learningRate)
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=model_parameters["learning_rate"])
|
||||
|
||||
#### Trainer ####
|
||||
trainer = AutoRegressiveQuantileTrainer(
|
||||
model,
|
||||
inputDim,
|
||||
optimizer,
|
||||
data_processor,
|
||||
quantiles,
|
||||
"cuda",
|
||||
debug=True,
|
||||
debug=False,
|
||||
)
|
||||
|
||||
trainer.add_metrics_to_track(
|
||||
[PinballLoss(quantiles), MSELoss(), L1Loss(), CRPSLoss()]
|
||||
)
|
||||
trainer.early_stopping(patience=10)
|
||||
trainer.plot_every(100)
|
||||
trainer.train(task=task, epochs=epochs, remotely=True)
|
||||
trainer.early_stopping(patience=30)
|
||||
trainer.plot_every(5)
|
||||
trainer.train(task=task, epochs=epochs, remotely=True)
|
||||
|
||||
@@ -60,11 +60,16 @@ quantile_lists = [
|
||||
quantiles_range = DiscreteParameterRange("general/quantiles", values=quantile_lists)
|
||||
|
||||
#### Data Config ####
|
||||
quarter_range = DiscreteParameterRange("data_features/quarter", values=[True, False])
|
||||
day_of_week_range = DiscreteParameterRange("data_features/day_of_week", values=[True, False])
|
||||
quarter_range = DiscreteParameterRange("data_features/quarter", values=[True])
|
||||
day_of_week_range = DiscreteParameterRange("data_features/day_of_week", values=[True])
|
||||
|
||||
load_forecast_range = DiscreteParameterRange("data_features/load_forecast", values=[True, False])
|
||||
load_history_range = DiscreteParameterRange("data_features/load_history", values=[True, False])
|
||||
load_forecast_range = DiscreteParameterRange("data_features/load_forecast", values=[True])
|
||||
|
||||
learning_rate = DiscreteParameterRange("model_parameters/learning_rate", values=[0.00001, 0.00005, 0.0001, 0.0005, 0.001])
|
||||
hidden_size = DiscreteParameterRange("model_parameters/hidden_size", values=[64, 128, 256, 512, 1024, 2048])
|
||||
num_layers = DiscreteParameterRange("model_parameters/num_layers", values=[1, 2, 3, 4, 5, 6])
|
||||
dropout = DiscreteParameterRange("model_parameters/dropout", values=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5])
|
||||
time_feature_embedding = DiscreteParameterRange("model_parameters/time_feature_embedding", values=[1,2,3,4,5,6])
|
||||
|
||||
### OPTIMIZER OBJECT ###
|
||||
optimizer = HyperParameterOptimizer(
|
||||
@@ -75,24 +80,27 @@ optimizer = HyperParameterOptimizer(
|
||||
execution_queue=execution_queue,
|
||||
max_number_of_concurrent_tasks=1,
|
||||
optimizer_class=aSearchStrategy,
|
||||
max_iteration_per_job=50,
|
||||
max_iteration_per_job=300,
|
||||
# save_top_k_tasks_only=3,
|
||||
pool_period_min=0.2,
|
||||
total_max_jobs=15,
|
||||
pool_period_min=1,
|
||||
total_max_jobs=40,
|
||||
|
||||
hyper_parameters=[
|
||||
quantiles_range,
|
||||
quarter_range,
|
||||
day_of_week_range,
|
||||
load_forecast_range,
|
||||
load_history_range
|
||||
learning_rate,
|
||||
hidden_size,
|
||||
num_layers,
|
||||
dropout,
|
||||
time_feature_embedding
|
||||
]
|
||||
|
||||
)
|
||||
|
||||
task.execute_remotely(queue_name="hypertuning", exit_process=True)
|
||||
|
||||
optimizer.set_report_period(0.2)
|
||||
optimizer.set_report_period(1)
|
||||
|
||||
def job_complete_callback(
|
||||
job_id, # type: str
|
||||
@@ -106,9 +114,9 @@ def job_complete_callback(
|
||||
print('WOOT WOOT we broke the record! Objective reached {}'.format(objective_value))
|
||||
|
||||
optimizer.start(job_complete_callback=job_complete_callback)
|
||||
optimizer.set_time_limit(in_minutes=120.0)
|
||||
optimizer.set_time_limit(in_minutes=120.0*8)
|
||||
optimizer.wait()
|
||||
top_exp = optimizer.get_top_experiments(top_k=3)
|
||||
top_exp = optimizer.get_top_experiments(top_k=5)
|
||||
print([t.id for t in top_exp])
|
||||
# make sure background optimization stopped
|
||||
optimizer.stop()
|
||||
|
||||
Reference in New Issue
Block a user