From 9f6d54f38a795bf7ef3463164bc7834cd91ae02d Mon Sep 17 00:00:00 2001 From: Yandi <yandirzm@gmail.com> Date: Tue, 24 Jan 2023 10:45:48 +0100 Subject: [PATCH] [Conditionning] Min max scaling + [Visualization] Changing the run names --- config.yml | 8 ++++++ dataloader.py | 23 ++++++++++++++---- .../best_model.pt | Bin 37727 -> 0 bytes main.py | 14 ++++++----- utils.py | 2 +- 5 files changed, 35 insertions(+), 12 deletions(-) delete mode 100644 logs/LinearRegression_10_Kaggle_2/best_model.pt diff --git a/config.yml b/config.yml index ab9b5b1..63ca7a3 100644 --- a/config.yml +++ b/config.yml @@ -21,6 +21,14 @@ ApproximativeMean: "torch.tensor([ 4.2457e+01, 7.4651e+00, 1.6738e+02, 1.3576 ApproximativeSTD: "torch.tensor([5.8939e-01, 8.1625e-01, 1.4535e+02, 5.4952e+07, 1.7543e-02, 1.3846e+02, 2.1302e-01, 1.9558e+00, 4.1455e+00, 1.2408e+01, 2.2938e-02, 9.9070e-02, 1.9490e-01, 9.2847e-03, 2.2575e+00, 8.5310e-02, 7.8280e-02, 8.6237e-02])" +ApproximativeMaxi: "torch.tensor([ 4.3479e+01, 9.0000e+00, 4.9267e+02, 1.4528e+09, 2.4088e+00, + 2.7824e+03, 1.5576e+00, 6.2457e+00, 2.5120e+02, 2.7188e+02, + 8.1683e+00, 3.2447e-01, 3.9041e+01, 2.7162e+00, 2.9419e+01, + 8.6284e-01, 7.6471e-01, -7.7745e-02])" +ApproximativeMini: "torch.tensor([ 4.1479e+01, 6.0000e+00, 1.0182e+00, 1.2623e+09, 2.2433e+00, + 1.0910e+01, 1.0000e-11, 1.0000e-11, -1.1467e+01, 1.9718e+02, + 7.9218e+00, 1.0000e-11, 3.7171e+01, 2.5584e+00, 1.2075e+01, + -1.2436e+00, -9.9256e-01, -8.8131e-01])" #Optimizer selection Optimizer: Adam # in {Adam} diff --git a/dataloader.py b/dataloader.py index a781edd..d312555 100644 --- a/dataloader.py +++ b/dataloader.py @@ -201,6 +201,10 @@ def get_stats_train_dataset( mean = 0. std = 0. nb_samples = 0. + it = iter(train_loader) + X, Y = next(it) + maxi = X.max(dim=0).values.max(dim=0).values + mini = X.min(dim=0).values.min(dim=0).values print("Computing the statistics of the train dataset") @@ -209,6 +213,9 @@ def get_stats_train_dataset( # Update the total sum mean += data[0].mean(dim=0).mean(dim=0) * data[0].size(0) std += data[0].std(dim=0).mean(dim=0) * data[0].size(0) + #Update mini and maxi + maxi = torch.stack((data[0].max(dim=0).values.max(dim=0).values, maxi)).max(dim=0).values + mini = torch.stack((data[0].min(dim=0).values.min(dim=0).values, mini)).min(dim=0).values # Update the number of samples nb_samples += data[0].size(0) @@ -216,7 +223,7 @@ def get_stats_train_dataset( mean /= nb_samples std /= nb_samples - return mean, std + return mean, std, maxi, mini def get_test_dataloader( filepath, @@ -259,6 +266,9 @@ def transform_remove_space_time(): def transform_normalize_with_train_statistics(MEAN, STD): return lambda attributes : torch.div(torch.sub(attributes, MEAN), STD) +def transform_min_max_scaling(MIN, MAX): + return lambda attributes : torch.div(torch.sub(attributes, MIN), torch.sub(MAX,MIN)) + def composite_transform(f,g): return lambda attributes : f(g(attributes)) @@ -292,8 +302,8 @@ if __name__ == "__main__": train_transform =composite_transform(transform_remove_space_time(), transform_normalize_with_train_statistics(MEAN, STD)) ) - """ - #mean, std = get_stats_train_dataset( + + mean, std, maxi, mini = get_stats_train_dataset( filepath = trainpath, num_days = num_days, batch_size = batch_size, @@ -303,9 +313,12 @@ if __name__ == "__main__": overwrite_index=True, max_num_samples=max_num_samples, ) - """ - + + print("Mini = ") + print(mini) + print("Maxi =") + print(maxi) it = iter(train_loader) X, Y = next(it) diff --git a/logs/LinearRegression_10_Kaggle_2/best_model.pt b/logs/LinearRegression_10_Kaggle_2/best_model.pt deleted file mode 100644 index 582f03fe3775a85a568499c448a18ac353cc8941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37727 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 diff --git a/main.py b/main.py index 7864a33..5ff24ec 100644 --- a/main.py +++ b/main.py @@ -49,8 +49,10 @@ if __name__ == "__main__": if approx_stats: MEAN = eval(cfg["ApproximativeMean"]) STD = eval(cfg["ApproximativeSTD"]) + MAX = eval(cfg["ApproximativeMaxi"]) + MIN = eval(cfg["ApproximativeMini"]) else : - MEAN, STD = get_stats_train_dataset(trainpath, + MEAN, STD, MAX, MIN = get_stats_train_dataset(trainpath, num_days, batch_size, num_workers, @@ -73,8 +75,8 @@ if __name__ == "__main__": max_num_samples=max_num_samples, #train_transform = dataloader.transform_remove_space_time(), #valid_transform = dataloader.transform_remove_space_time() - train_transform=dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_normalize_with_train_statistics(MEAN, STD)), - valid_transform=dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_normalize_with_train_statistics(MEAN, STD)) + train_transform=dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_min_max_scaling(MIN, MAX)), + valid_transform=dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_min_max_scaling(MIN, MAX)) ) if use_cuda : @@ -92,8 +94,8 @@ if __name__ == "__main__": optimizer = optimizer(cfg, network) - logdir = utils.create_unique_logpath(cfg["LogDir"], cfg["Model"]["Name"]) - wandb.run.name = utils.generate_unique_logpath("", cfg["Model"]["Name"]) + logdir, raw_run_name = utils.create_unique_logpath(cfg["LogDir"], cfg["Model"]["Name"]) + wandb.run.name = raw_run_name network_checkpoint = model.ModelCheckpoint(logdir + "/best_model.pt", network) @@ -114,7 +116,7 @@ if __name__ == "__main__": wandb.log({"val_loss": val_loss}) - create_submission.create_submission(network, dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_normalize_with_train_statistics(MEAN, STD)), device) + create_submission.create_submission(network, dataloader.composite_transform(dataloader.transform_remove_space_time(), dataloader.transform_min_max_scaling(MIN, MAX)), device) """ logdir = generate_unique_logpath(top_logdir, "linear") print("Logging to {}".format(logdir)) diff --git a/utils.py b/utils.py index 0c585e7..e5b78ae 100644 --- a/utils.py +++ b/utils.py @@ -14,4 +14,4 @@ def create_unique_logpath(top_logdir, raw_run_name): os.mkdir(top_logdir) logdir = generate_unique_logpath(top_logdir, raw_run_name) os.mkdir(logdir) - return logdir \ No newline at end of file + return logdir, raw_run_name \ No newline at end of file -- GitLab