From c2a9fa042c86e53f7d6fd9f3f6c95244933c2d59 Mon Sep 17 00:00:00 2001 From: gorold Date: Wed, 13 Jul 2022 16:03:34 +0800 Subject: [PATCH] first commit --- CODEOWNERS | 2 + CODE_OF_CONDUCT.md | 105 ++++++++++ LICENSE.txt | 12 ++ Makefile | 27 +++ README.md | 87 ++++++++ SECURITY.md | 7 + data/__init__.py | 0 data/datasets.py | 150 ++++++++++++++ experiments/__init__.py | 0 experiments/base.py | 105 ++++++++++ experiments/configs/ECL/192M.gin | 37 ++++ experiments/configs/ECL/336M.gin | 37 ++++ experiments/configs/ECL/720M.gin | 37 ++++ experiments/configs/ECL/96M.gin | 37 ++++ experiments/configs/ETTm2/192M.gin | 37 ++++ experiments/configs/ETTm2/192S.gin | 37 ++++ experiments/configs/ETTm2/336M.gin | 37 ++++ experiments/configs/ETTm2/336S.gin | 37 ++++ experiments/configs/ETTm2/720M.gin | 37 ++++ experiments/configs/ETTm2/720S.gin | 37 ++++ experiments/configs/ETTm2/96M.gin | 37 ++++ experiments/configs/ETTm2/96S.gin | 37 ++++ experiments/configs/Exchange/192M.gin | 37 ++++ experiments/configs/Exchange/192S.gin | 37 ++++ experiments/configs/Exchange/336M.gin | 37 ++++ experiments/configs/Exchange/336S.gin | 37 ++++ experiments/configs/Exchange/720M.gin | 37 ++++ experiments/configs/Exchange/720S.gin | 37 ++++ experiments/configs/Exchange/96M.gin | 37 ++++ experiments/configs/Exchange/96S.gin | 37 ++++ experiments/configs/ILI/192M.gin | 37 ++++ experiments/configs/ILI/336M.gin | 37 ++++ experiments/configs/ILI/720M.gin | 37 ++++ experiments/configs/ILI/96M.gin | 37 ++++ experiments/configs/Traffic/192M.gin | 37 ++++ experiments/configs/Traffic/336M.gin | 37 ++++ experiments/configs/Traffic/720M.gin | 37 ++++ experiments/configs/Traffic/96M.gin | 37 ++++ experiments/configs/Weather/192M.gin | 37 ++++ experiments/configs/Weather/336M.gin | 37 ++++ experiments/configs/Weather/720M.gin | 37 ++++ experiments/configs/Weather/96M.gin | 37 ++++ experiments/configs/hp_search/ECL.gin | 37 ++++ experiments/configs/hp_search/ETTm2.gin | 37 ++++ experiments/configs/hp_search/Exchange.gin | 37 ++++ experiments/configs/hp_search/ILI.gin | 37 ++++ experiments/configs/hp_search/Traffic.gin | 37 ++++ experiments/configs/hp_search/Weather.gin | 37 ++++ experiments/forecast.py | 226 +++++++++++++++++++++ models/DeepTIMe.py | 55 +++++ models/__init__.py | 13 ++ models/modules/__init__.py | 0 models/modules/feature_transforms.py | 36 ++++ models/modules/inr.py | 42 ++++ models/modules/regressors.py | 40 ++++ pics/deeptime.png | Bin 0 -> 276088 bytes requirements.txt | 13 ++ run.sh | 6 + run_hp_search.sh | 4 + storage/datasets/.gitignore | 4 + storage/experiments/.gitignore | 4 + utils/__init__.py | 0 utils/checkpoint.py | 59 ++++++ utils/losses.py | 15 ++ utils/metrics.py | 39 ++++ utils/ops.py | 54 +++++ utils/time_features.py | 182 +++++++++++++++++ 67 files changed, 2693 insertions(+) create mode 100644 CODEOWNERS create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 data/__init__.py create mode 100644 data/datasets.py create mode 100644 experiments/__init__.py create mode 100644 experiments/base.py create mode 100644 experiments/configs/ECL/192M.gin create mode 100644 experiments/configs/ECL/336M.gin create mode 100644 experiments/configs/ECL/720M.gin create mode 100644 experiments/configs/ECL/96M.gin create mode 100644 experiments/configs/ETTm2/192M.gin create mode 100644 experiments/configs/ETTm2/192S.gin create mode 100644 experiments/configs/ETTm2/336M.gin create mode 100644 experiments/configs/ETTm2/336S.gin create mode 100644 experiments/configs/ETTm2/720M.gin create mode 100644 experiments/configs/ETTm2/720S.gin create mode 100644 experiments/configs/ETTm2/96M.gin create mode 100644 experiments/configs/ETTm2/96S.gin create mode 100644 experiments/configs/Exchange/192M.gin create mode 100644 experiments/configs/Exchange/192S.gin create mode 100644 experiments/configs/Exchange/336M.gin create mode 100644 experiments/configs/Exchange/336S.gin create mode 100644 experiments/configs/Exchange/720M.gin create mode 100644 experiments/configs/Exchange/720S.gin create mode 100644 experiments/configs/Exchange/96M.gin create mode 100644 experiments/configs/Exchange/96S.gin create mode 100644 experiments/configs/ILI/192M.gin create mode 100644 experiments/configs/ILI/336M.gin create mode 100644 experiments/configs/ILI/720M.gin create mode 100644 experiments/configs/ILI/96M.gin create mode 100644 experiments/configs/Traffic/192M.gin create mode 100644 experiments/configs/Traffic/336M.gin create mode 100644 experiments/configs/Traffic/720M.gin create mode 100644 experiments/configs/Traffic/96M.gin create mode 100644 experiments/configs/Weather/192M.gin create mode 100644 experiments/configs/Weather/336M.gin create mode 100644 experiments/configs/Weather/720M.gin create mode 100644 experiments/configs/Weather/96M.gin create mode 100644 experiments/configs/hp_search/ECL.gin create mode 100644 experiments/configs/hp_search/ETTm2.gin create mode 100644 experiments/configs/hp_search/Exchange.gin create mode 100644 experiments/configs/hp_search/ILI.gin create mode 100644 experiments/configs/hp_search/Traffic.gin create mode 100644 experiments/configs/hp_search/Weather.gin create mode 100644 experiments/forecast.py create mode 100644 models/DeepTIMe.py create mode 100644 models/__init__.py create mode 100644 models/modules/__init__.py create mode 100644 models/modules/feature_transforms.py create mode 100644 models/modules/inr.py create mode 100644 models/modules/regressors.py create mode 100644 pics/deeptime.png create mode 100644 requirements.txt create mode 100644 run.sh create mode 100644 run_hp_search.sh create mode 100644 storage/datasets/.gitignore create mode 100644 storage/experiments/.gitignore create mode 100644 utils/__init__.py create mode 100644 utils/checkpoint.py create mode 100644 utils/losses.py create mode 100644 utils/metrics.py create mode 100644 utils/ops.py create mode 100644 utils/time_features.py diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..8d3c4ab --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,2 @@ +# Comment line immediately above ownership line is reserved for related other information. Please be careful while editing. +#ECCN:Open Source \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..b4612a7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,105 @@ +# Salesforce Open Source Community Code of Conduct + +## About the Code of Conduct + +Equality is a core value at Salesforce. We believe a diverse and inclusive +community fosters innovation and creativity, and are committed to building a +culture where everyone feels included. + +Salesforce open-source projects are committed to providing a friendly, safe, and +welcoming environment for all, regardless of gender identity and expression, +sexual orientation, disability, physical appearance, body size, ethnicity, nationality, +race, age, religion, level of experience, education, socioeconomic status, or +other similar personal characteristics. + +The goal of this code of conduct is to specify a baseline standard of behavior so +that people with different social values and communication styles can work +together effectively, productively, and respectfully in our open source community. +It also establishes a mechanism for reporting issues and resolving conflicts. + +All questions and reports of abusive, harassing, or otherwise unacceptable behavior +in a Salesforce open-source project may be reported by contacting the Salesforce +Open Source Conduct Committee at ossconduct@salesforce.com. + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of gender +identity and expression, sexual orientation, disability, physical appearance, +body size, ethnicity, nationality, race, age, religion, level of experience, education, +socioeconomic status, or other similar personal characteristics. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy toward other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Personal attacks, insulting/derogatory comments, or trolling +* Public or private harassment +* Publishing, or threatening to publish, others' private information—such as +a physical or electronic address—without explicit permission +* Other conduct which could reasonably be considered inappropriate in a +professional setting +* Advocating for or encouraging any of the above behaviors + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned with this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project email +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the Salesforce Open Source Conduct Committee +at ossconduct@salesforce.com. All complaints will be reviewed and investigated +and will result in a response that is deemed necessary and appropriate to the +circumstances. The committee is obligated to maintain confidentiality with +regard to the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership and the Salesforce Open Source Conduct +Committee. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant-home], +version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html. +It includes adaptions and additions from [Go Community Code of Conduct][golang-coc], +[CNCF Code of Conduct][cncf-coc], and [Microsoft Open Source Code of Conduct][microsoft-coc]. + +This Code of Conduct is licensed under the [Creative Commons Attribution 3.0 License][cc-by-3-us]. + +[contributor-covenant-home]: https://www.contributor-covenant.org (https://www.contributor-covenant.org/) +[golang-coc]: https://golang.org/conduct +[cncf-coc]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md +[microsoft-coc]: https://opensource.microsoft.com/codeofconduct/ +[cc-by-3-us]: https://creativecommons.org/licenses/by/3.0/us/ \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..d1c9164 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,12 @@ +Copyright (c) 2022, Salesforce.com, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..99bd1f2 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ +ROOT := $(shell dirname $(realpath $(firstword ${MAKEFILE_LIST}))) + +build: .require-config + python -m experiments.forecast --config_path=${config} build_experiment + +build-all: .require-path + for config in $(shell ls ${path}/*.gin); do \ + make build config=$$config; \ + done + +run: .require-command + bash -c "`cat ${ROOT}/${command}`" + +.require-config: +ifndef config + $(error config is required) +endif + +.require-command: +ifndef command + $(error command is required) +endif + +.require-path: +ifndef path + $(error path is required) +endif diff --git a/README.md b/README.md new file mode 100644 index 0000000..d78f936 --- /dev/null +++ b/README.md @@ -0,0 +1,87 @@ +# DeepTIMe: Deep Time-Index Meta-Learning for Non-stationary Forecasting + +

+ +

+Figure 1. Overall approach of DeepTIMe. +

+ +Official PyTorch code repository for the DeepTIMe paper. + +## Requirements + +Dependencies for this project can be installed by: + +```bash +pip install -r requirements.txt +``` + +## Quick Start + +### Data + +To get started, you will need to download the datasets as described in our paper: + +* Pre-processed datasets can be downloaded from the following + links, [Tsinghua Cloud](https://cloud.tsinghua.edu.cn/d/e1ccfff39ad541908bae/) + or [Google Drive](https://drive.google.com/drive/folders/1ZOYpTUa82_jCcxIdTmyr0LXQfvaM9vIy?usp=sharing), as obtained + from [Autoformer's](https://github.com/thuml/Autoformer) GitHub repository. +* Place the downloaded datasets into the `storage/datasets/` folder, e.g. `storage/datasets/ETT-small/ETTm2.csv`. + +### Reproducing Experiment Results + +We provide some scripts to quickly reproduce the results reported in our paper. There are two options, to run the full +hyperparameter search, or to directly run the experiments with hyperparameters provided in the configuration files. + +__Option A__: Run the full hyperparameter search. + +1. Run the following command to generate the experiments: `make build-all path=experiments/configs/hp_search`. +2. Run the following script to perform training and evaluation: `./run_hp_search.sh` (you may need to + run `chmod u+x run_hp_search.sh` first). + +__Option B__: Directly run the experiments with hyperparameters provided in the configuration files. + +1. Run the following command to generate the experiments: `make build-all path=experiments/configs`. +2. Run the following script to perform training and evaluation: `./run.sh` (you may need to run `chmod u+x run.sh` + first). + +Finally, results can be viewed on tensorboard by running `tensorboard --logdir storage/experiments/`, or in +the `storage/experiments/experiment_name/metrics.npy` file. + +## Detailed Usage + +Further details of the code repository can be found here. The codebase is structured to generate experiments from +a `.gin` configuration file based on the `build.variables_dict` argument. + +1. First, build the experiment from a config file. We provide 2 ways to build an experiment. + 1. Build a single config file: + ``` + make build config=experiments/configs/folder_name/file_name.gin + ``` + 2. Build a group of config files: + ```bash + make build-all path=experiments/configs/folder_name + ``` +2. Next, run the experiment using the following command + ```bash + python -m experiments.forecast --config_path=storage/experiments/experiment_name/config.gin run + ``` + Alternatively, the first step generates a command file found in `storage/experiments/experiment_name/command`, which + you can use by the following command, + ```bash + make run command=storage/experiments/experiment_name/command + ``` +3. Finally, you can observe the results on tensorboard + ```bash + tensorboard --logdir storage/experiments/ + ``` + or view the `storage/experiments/deeptime/experiment_name/metrics.npy` file. + +## Acknowledgements + +The implementation of DeepTIMe relies on resources from the following codebases and repositories, we thank the original +authors for open-sourcing their work. + +* https://github.com/ElementAI/N-BEATS +* https://github.com/zhouhaoyi/Informer2020 +* https://github.com/thuml/Autoformer \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e31774d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +## Security + +Please report any security issue to [security@salesforce.com](mailto:security@salesforce.com) +as soon as it is discovered. This library limits its runtime dependencies in +order to reduce the total cost of ownership as much as can be, but all consumers +should remain vigilant and have their security stakeholders review all third-party +products (3PP) like this one and their dependencies. \ No newline at end of file diff --git a/data/__init__.py b/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data/datasets.py b/data/datasets.py new file mode 100644 index 0000000..58a1508 --- /dev/null +++ b/data/datasets.py @@ -0,0 +1,150 @@ +import os +from os.path import join +from typing import Optional, List, Tuple + +import gin +import numpy as np +import pandas as pd +from sklearn.preprocessing import StandardScaler +from torch.utils.data import Dataset, DataLoader + +from utils.time_features import get_time_features + + +@gin.configurable() +class ForecastDataset(Dataset): + def __init__(self, + flag: str, + horizon_len: int, + scale: bool, + cross_learn: bool, + data_path: str, + root_path: Optional[str] = 'storage/datasets', + features: Optional[str] = 'S', + target: Optional[str] = 'OT', + lookback_len: Optional[int] = None, + lookback_aux_len: Optional[int] = 0, + lookback_mult: Optional[float] = None, + time_features: Optional = [], + normalise_time_features: Optional = True,): + """ + :param flag: train/val/test flag + :param horizon_len: number of time steps in forecast horizon + :param scale: performs standard scaling + :param data_path: relative (to root_path) path to data file (.csv) + :param cross_learn: treats multivariate time series as multiple univar time series + :param root_path: path to datasets folder + :param features: multivar (M) or univar (S) forecasting + :param target: name of target variable for univar forecasting (features=S) + :param lookback_len: number of time steps in lookback window + :param lookback_aux_len: number of time steps to append to y from the lookback window + (for models with decoders which requires initialisation) + :param lookback_mult: multiplier to decide lookback window length + """ + assert flag in ('train', 'val', 'test'), \ + f"flag should be one of (train, val, test)" + assert features in ('M', 'S'), \ + f"features should be one of (M: multivar, S: univar)" + assert (lookback_len is not None) ^ (lookback_mult is not None), \ + f"only 'lookback_len' xor 'lookback_mult' should be specified" + + self.flag = flag + self.lookback_len = lookback_len or int(horizon_len * lookback_mult) + self.lookback_aux_len = lookback_aux_len + self.horizon_len = horizon_len + self.scale = scale + self.cross_learn = cross_learn + self.data_path = data_path + self.root_path = root_path + self.features = features + self.target = target + self.time_features = time_features + self.normalise_time_features = normalise_time_features + + self.n_dims = None + self.scaler = None + self.data_x = None + self.data_y = None + self.timestamps = None + self.n_time = None + self.n_time_samples = None + self.load_data() + + def load_data(self): + df_raw = pd.read_csv(join(self.root_path, self.data_path)) # (n_obs, date + n_feats) + cols = list(df_raw.columns) + cols.remove('date') + cols.remove(self.target) + df_raw = df_raw[['date'] + cols + [self.target]] + border1s, border2s, border1, border2 = self.get_borders(df_raw) + + if self.features == 'M': + df_data = df_raw[cols + [self.target]] + self.n_dims = len(cols + [self.target]) + elif self.features == 'S': + df_data = df_raw[[self.target]] + self.n_dims = 1 + else: + raise ValueError + + self.scaler = StandardScaler() + if self.scale: + train_data = df_data[border1s[0]:border2s[0]] + self.scaler.fit(train_data.values) + data = self.scaler.transform(df_data.values) + else: + data = df_data.values + + self.data_x = data[border1:border2] + self.data_y = data[border1:border2] + self.timestamps = get_time_features(pd.to_datetime(df_raw.date[border1:border2].values), + normalise=self.normalise_time_features, + features=self.time_features) + self.n_time = len(self.data_x) + self.n_time_samples = self.n_time - self.lookback_len - self.horizon_len + 1 + + def get_borders(self, df_raw: pd.DataFrame) -> Tuple[List[int], List[int], List[int], List[int]]: + set_type = {'train': 0, 'val': 1, 'test': 2}[self.flag] + if self.data_path.startswith('ETT-small/ETTh'): + border1s = [0, 12 * 30 * 24 - self.lookback_len, 12 * 30 * 24 + 4 * 30 * 24 - self.lookback_len] + border2s = [12 * 30 * 24, 12 * 30 * 24 + 4 * 30 * 24, 12 * 30 * 24 + 8 * 30 * 24] + elif self.data_path.startswith('ETT-small/ETTm'): + border1s = [0, 12 * 30 * 24 * 4 - self.lookback_len, 12 * 30 * 24 * 4 + 4 * 30 * 24 * 4 - self.lookback_len] + border2s = [12 * 30 * 24 * 4, 12 * 30 * 24 * 4 + 4 * 30 * 24 * 4, 12 * 30 * 24 * 4 + 8 * 30 * 24 * 4] + else: + num_train = int(len(df_raw) * 0.7) + num_test = int(len(df_raw) * 0.2) + num_val = len(df_raw) - num_train - num_test + border1s = [0, num_train - self.lookback_len, len(df_raw) - num_test - self.lookback_len] + border2s = [num_train, num_train + num_val, len(df_raw)] + border1 = border1s[set_type] + border2 = border2s[set_type] + return border1s, border2s, border1, border2 + + def __len__(self): + if self.cross_learn: + return self.n_time_samples * self.n_dims + return self.n_time_samples + + def __getitem__(self, idx: int) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + if self.cross_learn: + dim_idx = idx // self.n_time_samples + dim_slice = slice(dim_idx, dim_idx + 1) + idx = idx % self.n_time_samples + else: + dim_slice = slice(None) + + x_start = idx + x_end = x_start + self.lookback_len + y_start = x_end - self.lookback_aux_len + y_end = y_start + self.lookback_aux_len + self.horizon_len + + x = self.data_x[x_start:x_end, dim_slice] + y = self.data_y[y_start:y_end, dim_slice] + x_time = self.timestamps[x_start:x_end] + y_time = self.timestamps[y_start:y_end] + + return x, y, x_time, y_time + + def inverse_transform(self, data): + return self.scaler.inverse_transform(data) \ No newline at end of file diff --git a/experiments/__init__.py b/experiments/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/experiments/base.py b/experiments/base.py new file mode 100644 index 0000000..45d5b8c --- /dev/null +++ b/experiments/base.py @@ -0,0 +1,105 @@ +import os +import logging +import time +import random +from abc import ABC, abstractmethod +from pathlib import Path +from shutil import copy +from typing import Dict, List, Union, Optional +from itertools import product + +from tqdm import tqdm +import gin + + +EXPERIMENTS_PATH = 'storage/experiments' +SearchSpace = List[Union[str, int, float]] + + +class Experiment(ABC): + + def __init__(self, config_path: str): + self.config_path = config_path + self.root = Path(config_path).parent + gin.parse_config_file(self.config_path) + + @gin.configurable() + def build(self, + experiment_name: str, + module: str, + repeat: int, + variables_dict: Dict[str, SearchSpace]): + """ + Builds an experiment, which consists of a list of instances. + Can be used for hyperparam optimization, or training an ensemble. + :param experiment_name: Name of experiment. + :param module: Name of the file to run. + :param repeat: Number of repeated instances per hyperparam setting. + :param variables_dict: Dictionary containing hyperparams to test. + """ + # create experiment instance(s) + logging.info('Creating experiment instances ...') + experiment_path = os.path.join(EXPERIMENTS_PATH, experiment_name) + variables_dict['repeat'] = list(range(repeat)) + variable_names, variables = zip(*variables_dict.items()) + for instance_values in tqdm(product(*variables)): + instance_variables = dict(zip(variable_names, instance_values)) + instance_name = ','.join(['%s=%.4g' % (name.split('.')[-1], value) + if isinstance(value, float) + else '%s=%s' % (name.split('.')[-1], str(value).replace(' ', '_')) + for name, value in instance_variables.items()]) + instance_path = os.path.join(experiment_path, instance_name) + Path(instance_path).mkdir(parents=True, exist_ok=False) + + # write parameters + instance_config_path = os.path.join(instance_path, 'config.gin') + copy(self.config_path, instance_config_path) + with open(instance_config_path, 'a') as cfg: + for name, value in instance_variables.items(): + value = f"'{value}'" if isinstance(value, str) else str(value) + cfg.write(f'{name} = {value}\n') + + # write command file + command_file = os.path.join(instance_path, 'command') + with open(command_file, 'w') as cmd: + cmd.write(f'python -m {module} ' + f'--config_path={instance_config_path} ' + f'run >> {instance_path}/instance.log 2>&1') + + @abstractmethod + def instance(self): + """ + Instance logic method must be implemented with @gin.configurable() + """ + ... + + @gin.configurable() + def run(self, timer: Optional[int] = 0): + """ + Run instance logic. + """ + time.sleep(random.uniform(0, timer)) + running_flag = os.path.join(self.root, '_RUNNING') + success_flag = os.path.join(self.root, '_SUCCESS') + if os.path.isfile(success_flag) or os.path.isfile(running_flag): + return + elif not os.path.isfile(running_flag): + Path(running_flag).touch() + + try: + self.instance() + except Exception as e: + Path(running_flag).unlink() + raise e + except KeyboardInterrupt: + Path(running_flag).unlink() + raise Exception('KeyboardInterrupt') + + # mark experiment as finished. + Path(running_flag).unlink() + Path(success_flag).touch() + + def build_experiment(self): + if EXPERIMENTS_PATH in str(self.root): + raise Exception('Cannot build ensemble from ensemble member configuration.') + self.build() \ No newline at end of file diff --git a/experiments/configs/ECL/192M.gin b/experiments/configs/ECL/192M.gin new file mode 100644 index 0000000..de114f0 --- /dev/null +++ b/experiments/configs/ECL/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ECL/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'electricity/electricity.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/ECL/336M.gin b/experiments/configs/ECL/336M.gin new file mode 100644 index 0000000..eee2673 --- /dev/null +++ b/experiments/configs/ECL/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ECL/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'electricity/electricity.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/ECL/720M.gin b/experiments/configs/ECL/720M.gin new file mode 100644 index 0000000..995c5fb --- /dev/null +++ b/experiments/configs/ECL/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ECL/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'electricity/electricity.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 1 diff --git a/experiments/configs/ECL/96M.gin b/experiments/configs/ECL/96M.gin new file mode 100644 index 0000000..546cce6 --- /dev/null +++ b/experiments/configs/ECL/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ECL/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'electricity/electricity.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 9 diff --git a/experiments/configs/ETTm2/192M.gin b/experiments/configs/ETTm2/192M.gin new file mode 100644 index 0000000..2687ecd --- /dev/null +++ b/experiments/configs/ETTm2/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/ETTm2/192S.gin b/experiments/configs/ETTm2/192S.gin new file mode 100644 index 0000000..67684ea --- /dev/null +++ b/experiments/configs/ETTm2/192S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/192S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/ETTm2/336M.gin b/experiments/configs/ETTm2/336M.gin new file mode 100644 index 0000000..f609ef8 --- /dev/null +++ b/experiments/configs/ETTm2/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/ETTm2/336S.gin b/experiments/configs/ETTm2/336S.gin new file mode 100644 index 0000000..3d2debb --- /dev/null +++ b/experiments/configs/ETTm2/336S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/336S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/ETTm2/720M.gin b/experiments/configs/ETTm2/720M.gin new file mode 100644 index 0000000..6c503ae --- /dev/null +++ b/experiments/configs/ETTm2/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 1 diff --git a/experiments/configs/ETTm2/720S.gin b/experiments/configs/ETTm2/720S.gin new file mode 100644 index 0000000..6d00c03 --- /dev/null +++ b/experiments/configs/ETTm2/720S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/720S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 1 diff --git a/experiments/configs/ETTm2/96M.gin b/experiments/configs/ETTm2/96M.gin new file mode 100644 index 0000000..109da1f --- /dev/null +++ b/experiments/configs/ETTm2/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/ETTm2/96S.gin b/experiments/configs/ETTm2/96S.gin new file mode 100644 index 0000000..f75c6a5 --- /dev/null +++ b/experiments/configs/ETTm2/96S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ETTm2/96S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/Exchange/192M.gin b/experiments/configs/Exchange/192M.gin new file mode 100644 index 0000000..003e3a3 --- /dev/null +++ b/experiments/configs/Exchange/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/Exchange/192S.gin b/experiments/configs/Exchange/192S.gin new file mode 100644 index 0000000..81c6a16 --- /dev/null +++ b/experiments/configs/Exchange/192S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/192S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 1 diff --git a/experiments/configs/Exchange/336M.gin b/experiments/configs/Exchange/336M.gin new file mode 100644 index 0000000..b81a904 --- /dev/null +++ b/experiments/configs/Exchange/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/Exchange/336S.gin b/experiments/configs/Exchange/336S.gin new file mode 100644 index 0000000..a1b3936 --- /dev/null +++ b/experiments/configs/Exchange/336S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/336S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/Exchange/720M.gin b/experiments/configs/Exchange/720M.gin new file mode 100644 index 0000000..e757500 --- /dev/null +++ b/experiments/configs/Exchange/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/Exchange/720S.gin b/experiments/configs/Exchange/720S.gin new file mode 100644 index 0000000..2e115ff --- /dev/null +++ b/experiments/configs/Exchange/720S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/720S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/Exchange/96M.gin b/experiments/configs/Exchange/96M.gin new file mode 100644 index 0000000..7164d1a --- /dev/null +++ b/experiments/configs/Exchange/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 1 diff --git a/experiments/configs/Exchange/96S.gin b/experiments/configs/Exchange/96S.gin new file mode 100644 index 0000000..7953181 --- /dev/null +++ b/experiments/configs/Exchange/96S.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Exchange/96S' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'S' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/ILI/192M.gin b/experiments/configs/ILI/192M.gin new file mode 100644 index 0000000..e197be1 --- /dev/null +++ b/experiments/configs/ILI/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ILI/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'illness/national_illness.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/ILI/336M.gin b/experiments/configs/ILI/336M.gin new file mode 100644 index 0000000..2082467 --- /dev/null +++ b/experiments/configs/ILI/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ILI/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'illness/national_illness.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/ILI/720M.gin b/experiments/configs/ILI/720M.gin new file mode 100644 index 0000000..7957542 --- /dev/null +++ b/experiments/configs/ILI/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ILI/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'illness/national_illness.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/ILI/96M.gin b/experiments/configs/ILI/96M.gin new file mode 100644 index 0000000..905acc6 --- /dev/null +++ b/experiments/configs/ILI/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'ILI/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'illness/national_illness.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 9 diff --git a/experiments/configs/Traffic/192M.gin b/experiments/configs/Traffic/192M.gin new file mode 100644 index 0000000..868f567 --- /dev/null +++ b/experiments/configs/Traffic/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Traffic/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'traffic/traffic.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/Traffic/336M.gin b/experiments/configs/Traffic/336M.gin new file mode 100644 index 0000000..b186c4a --- /dev/null +++ b/experiments/configs/Traffic/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Traffic/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'traffic/traffic.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 336 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/Traffic/720M.gin b/experiments/configs/Traffic/720M.gin new file mode 100644 index 0000000..6932c24 --- /dev/null +++ b/experiments/configs/Traffic/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Traffic/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'traffic/traffic.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/Traffic/96M.gin b/experiments/configs/Traffic/96M.gin new file mode 100644 index 0000000..5a6fa9e --- /dev/null +++ b/experiments/configs/Traffic/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Traffic/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'traffic/traffic.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 9 diff --git a/experiments/configs/Weather/192M.gin b/experiments/configs/Weather/192M.gin new file mode 100644 index 0000000..d1dee6a --- /dev/null +++ b/experiments/configs/Weather/192M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Weather/192M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'weather/weather.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 7 diff --git a/experiments/configs/Weather/336M.gin b/experiments/configs/Weather/336M.gin new file mode 100644 index 0000000..69aceb8 --- /dev/null +++ b/experiments/configs/Weather/336M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Weather/336M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'weather/weather.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 192 +ForecastDataset.lookback_mult = 3 diff --git a/experiments/configs/Weather/720M.gin b/experiments/configs/Weather/720M.gin new file mode 100644 index 0000000..8d20cd8 --- /dev/null +++ b/experiments/configs/Weather/720M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Weather/720M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'weather/weather.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 720 +ForecastDataset.lookback_mult = 5 diff --git a/experiments/configs/Weather/96M.gin b/experiments/configs/Weather/96M.gin new file mode 100644 index 0000000..89048a4 --- /dev/null +++ b/experiments/configs/Weather/96M.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'Weather/96M' +build.module = 'experiments.forecast' +build.repeat = 1 +build.variables_dict = { +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'weather/weather.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True +ForecastDataset.features = 'M' +ForecastDataset.horizon_len = 96 +ForecastDataset.lookback_mult = 9 diff --git a/experiments/configs/hp_search/ECL.gin b/experiments/configs/hp_search/ECL.gin new file mode 100644 index 0000000..9872237 --- /dev/null +++ b/experiments/configs/hp_search/ECL.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/ECL' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [96, 192, 336, 720], + 'ForecastDataset.features': ['M'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'electricity/electricity.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/configs/hp_search/ETTm2.gin b/experiments/configs/hp_search/ETTm2.gin new file mode 100644 index 0000000..9e2e56b --- /dev/null +++ b/experiments/configs/hp_search/ETTm2.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/ETTm2' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [96, 192, 336, 720], + 'ForecastDataset.features': ['M', 'S'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'ETT-small/ETTm2.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/configs/hp_search/Exchange.gin b/experiments/configs/hp_search/Exchange.gin new file mode 100644 index 0000000..394ce03 --- /dev/null +++ b/experiments/configs/hp_search/Exchange.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/Exchange' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [96, 192, 336, 720], + 'ForecastDataset.features': ['M', 'S'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'exchange_rate/exchange_rate.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/configs/hp_search/ILI.gin b/experiments/configs/hp_search/ILI.gin new file mode 100644 index 0000000..ded40fc --- /dev/null +++ b/experiments/configs/hp_search/ILI.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/ILI' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [24, 36, 48, 60], + 'ForecastDataset.features': ['M'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'illness/national_illness.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/configs/hp_search/Traffic.gin b/experiments/configs/hp_search/Traffic.gin new file mode 100644 index 0000000..dab204b --- /dev/null +++ b/experiments/configs/hp_search/Traffic.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/Traffic' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [96, 192, 336, 720], + 'ForecastDataset.features': ['M'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'traffic/traffic.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/configs/hp_search/Weather.gin b/experiments/configs/hp_search/Weather.gin new file mode 100644 index 0000000..00b1863 --- /dev/null +++ b/experiments/configs/hp_search/Weather.gin @@ -0,0 +1,37 @@ +build.experiment_name = 'hp_search/Weather' +build.module = 'experiments.forecast' +build.repeat = 3 +build.variables_dict = { + 'ForecastDataset.lookback_mult': [1, 3, 5, 7, 9], + 'ForecastDataset.horizon_len': [96, 192, 336, 720], + 'ForecastDataset.features': ['M'], +} + +instance.model_type = 'deeptime' +instance.save_vals = False + +get_optimizer.lr = 1e-3 +get_optimizer.lambda_lr = 1. +get_optimizer.weight_decay = 0. + +get_scheduler.warmup_epochs = 5 + +get_data.batch_size = 256 + +train.loss_name = 'mse' +train.epochs = 50 +train.clip = 10. + +Checkpoint.patience = 7 + +deeptime.layer_size = 256 +deeptime.inr_layers = 5 +deeptime.n_fourier_feats = 4096 +deeptime.scales = [0.01, 0.1, 1, 5, 10, 20, 50, 100] + +ForecastDataset.data_path = 'weather/weather.csv' +ForecastDataset.target = 'OT' +ForecastDataset.scale = True +ForecastDataset.cross_learn = False +ForecastDataset.time_features = [] +ForecastDataset.normalise_time_features = True diff --git a/experiments/forecast.py b/experiments/forecast.py new file mode 100644 index 0000000..e08685a --- /dev/null +++ b/experiments/forecast.py @@ -0,0 +1,226 @@ +import os +from os.path import join +import math +import logging +from typing import Callable, Optional, Union, Dict, Tuple + +import gin +from fire import Fire +import numpy as np +import torch +from torch.utils.data import DataLoader +from torch import optim +from torch import nn + +from experiments.base import Experiment +from data.datasets import ForecastDataset +from models import get_model +from utils.checkpoint import Checkpoint +from utils.ops import default_device, to_tensor +from utils.losses import get_loss_fn +from utils.metrics import calc_metrics + + +class ForecastExperiment(Experiment): + @gin.configurable() + def instance(self, + model_type: str, + save_vals: Optional[bool] = True,): + # load datasets, model, checkpointer + train_set, train_loader = get_data(flag='train') + val_set, val_loader = get_data(flag='val') + test_set, test_loader = get_data(flag='test') + + model = get_model(model_type, + dim_size=train_set.data_x.shape[1], + datetime_feats=train_set.timestamps.shape[-1]).to(default_device()) + checkpoint = Checkpoint(self.root) + + # train forecasting task + model = train(model, checkpoint, train_loader, val_loader, test_loader) + + # testing + val_metrics = validate(model, loader=val_loader, report_metrics=True) + test_metrics = validate(model, loader=test_loader, report_metrics=True, + save_path=self.root if save_vals else None) + np.save(join(self.root, 'metrics.npy'), {'val': val_metrics, 'test': test_metrics}) + + val_metrics = {f'ValMetric/{k}': v for k, v in val_metrics.items()} + test_metrics = {f'TestMetric/{k}': v for k, v in test_metrics.items()} + checkpoint.close({**val_metrics, **test_metrics}) + + +@gin.configurable() +def get_optimizer(model: nn.Module, + lr: Optional[float] = 1e-3, + lambda_lr: Optional[float] = 1., + weight_decay: Optional[float] = 1e-2) -> optim.Optimizer: + group1 = [] # lambda + group2 = [] # no decay + group3 = [] # decay + no_decay_list = ('bias', 'norm',) + for param_name, param in model.named_parameters(): + if '_lambda' in param_name: + group1.append(param) + elif any([mod in param_name for mod in no_decay_list]): + group2.append(param) + else: + group3.append(param) + optimizer = optim.Adam([ + {'params': group1, 'weight_decay': 0, 'lr': lambda_lr, 'scheduler': 'cosine_annealing'}, + {'params': group2, 'weight_decay': 0, 'scheduler': 'cosine_annealing_with_linear_warmup'}, + {'params': group3, 'scheduler': 'cosine_annealing_with_linear_warmup'} + ], lr=lr, weight_decay=weight_decay) + return optimizer + + +@gin.configurable() +def get_scheduler(optimizer: optim.Optimizer, + T_max: int, + warmup_epochs: int, + eta_min: Optional[float] = 0.) -> optim.lr_scheduler.LambdaLR: + scheduler_fns = [] + for param_group in optimizer.param_groups: + scheduler = param_group['scheduler'] + if scheduler == 'none': + fn = lambda T_cur: 1 + elif scheduler == 'cosine_annealing': + lr = eta_max = param_group['lr'] + fn = lambda T_cur: (eta_min + 0.5 * (eta_max - eta_min) * ( + 1.0 + math.cos((T_cur - warmup_epochs) / (T_max - warmup_epochs) * math.pi))) / lr + elif scheduler == 'cosine_annealing_with_linear_warmup': + lr = eta_max = param_group['lr'] + # https://blog.csdn.net/qq_36560894/article/details/114004799 + fn = lambda T_cur: T_cur / warmup_epochs if T_cur < warmup_epochs else (eta_min + 0.5 * ( + eta_max - eta_min) * (1.0 + math.cos( + (T_cur - warmup_epochs) / (T_max - warmup_epochs) * math.pi))) / lr + else: + raise ValueError(f'No such scheduler, {scheduler}') + scheduler_fns.append(fn) + scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=scheduler_fns) + return scheduler + + +@gin.configurable() +def get_data(flag: bool, + batch_size: int) -> Tuple[ForecastDataset, DataLoader]: + if flag in ('val', 'test'): + shuffle = False + drop_last = False + elif flag == 'train': + shuffle = True + drop_last = True + else: + raise ValueError(f'no such flag {flag}') + dataset = ForecastDataset(flag) + data_loader = DataLoader(dataset, + batch_size=batch_size, + shuffle=shuffle, + drop_last=drop_last) + return dataset, data_loader + + +@gin.configurable() +def train(model: nn.Module, + checkpoint: Checkpoint, + train_loader: DataLoader, + val_loader: DataLoader, + test_loader: DataLoader, + loss_name: str, + epochs: int, + clip: float) -> nn.Module: + + optimizer = get_optimizer(model) + scheduler = get_scheduler(optimizer=optimizer, T_max=epochs) + training_loss_fn = get_loss_fn(loss_name) + + for epoch in range(epochs): + train_loss = [] + model.train() + for it, data in enumerate(train_loader): + optimizer.zero_grad() + + x, y, x_time, y_time = map(to_tensor, data) + forecast = model(x, x_time, y_time) + + if isinstance(forecast, tuple): + # for models which require reconstruction + forecast loss + loss = training_loss_fn(forecast[0], x) + \ + training_loss_fn(forecast[1], y) + else: + loss = training_loss_fn(forecast, y) + loss.backward() + nn.utils.clip_grad_norm_(model.parameters(), clip) + optimizer.step() + + train_loss.append(loss.item()) + if (it + 1) % 100 == 0: + logging.info(f"epochs: {epoch + 1}, iters: {it + 1} | training loss: {loss.item():.2f}") + scheduler.step() + + train_loss = np.average(train_loss) + val_loss = validate(model, loader=val_loader, loss_fn=training_loss_fn) + test_loss = validate(model, loader=test_loader, loss_fn=training_loss_fn) + + scalars = {'Loss/Train': train_loss, + 'Loss/Val': val_loss, + 'Loss/Test': test_loss} + checkpoint(epoch + 1, model, scalars=scalars) + + if checkpoint.early_stop: + logging.info("Early stopping") + break + + if epochs > 0: + model.load_state_dict(torch.load(checkpoint.model_path)) + return model + + +@torch.no_grad() +def validate(model: nn.Module, + loader: DataLoader, + loss_fn: Optional[Callable] = None, + report_metrics: Optional[bool] = False, + save_path: Optional[str] = None) -> Union[Dict[str, float], float]: + model.eval() + preds = [] + trues = [] + inps = [] + total_loss = [] + for it, data in enumerate(loader): + x, y, x_time, y_time = map(to_tensor, data) + + if x.shape[0] == 1: + # skip final batch if batch_size == 1 + # due to bug in torch.linalg.solve which raises error when batch_size == 1 + continue + + forecast = model(x, x_time, y_time) + + if report_metrics: + preds.append(forecast) + trues.append(y) + if save_path is not None: + inps.append(x) + else: + loss = loss_fn(forecast, y, reduction='none') + total_loss.append(loss) + + if report_metrics: + preds = torch.cat(preds, dim=0).detach().cpu().numpy() + trues = torch.cat(trues, dim=0).detach().cpu().numpy() + if save_path is not None: + inps = torch.cat(inps, dim=0).detach().cpu().numpy() + np.save(join(save_path, 'inps.npy'), inps) + np.save(join(save_path, 'preds.npy'), preds) + np.save(join(save_path, 'trues.npy'), trues) + metrics = calc_metrics(preds, trues) + return metrics + + total_loss = torch.cat(total_loss, dim=0).cpu() + return np.average(total_loss) + + +if __name__ == '__main__': + logging.root.setLevel(logging.INFO) + Fire(ForecastExperiment) \ No newline at end of file diff --git a/models/DeepTIMe.py b/models/DeepTIMe.py new file mode 100644 index 0000000..e08a490 --- /dev/null +++ b/models/DeepTIMe.py @@ -0,0 +1,55 @@ +from typing import Optional + +import gin +import torch +import torch.nn as nn +from torch import Tensor +from einops import rearrange, repeat, reduce + +from models.modules.inr import INR +from models.modules.regressors import RidgeRegressor + + +@gin.configurable() +def deeptime(datetime_feats: int, layer_size: int, inr_layers: int, n_fourier_feats: int, scales: float): + return DeepTIMe(datetime_feats, layer_size, inr_layers, n_fourier_feats, scales) + + +class DeepTIMe(nn.Module): + def __init__(self, datetime_feats: int, layer_size: int, inr_layers: int, n_fourier_feats: int, scales: float): + super().__init__() + self.inr = INR(in_feats=datetime_feats + 1, layers=inr_layers, layer_size=layer_size, + n_fourier_feats=n_fourier_feats, scales=scales) + self.adaptive_weights = RidgeRegressor() + + self.datetime_feats = datetime_feats + self.inr_layers = inr_layers + self.layer_size = layer_size + self.n_fourier_feats = n_fourier_feats + self.scales = scales + + def forward(self, x: Tensor, x_time: Tensor, y_time: Tensor) -> Tensor: + tgt_horizon_len = y_time.shape[1] + batch_size, lookback_len, _ = x.shape + coords = self.get_coords(lookback_len, tgt_horizon_len).to(x.device) + + if y_time.shape[-1] != 0: + time = torch.cat([x_time, y_time], dim=1) + coords = repeat(coords, '1 t 1 -> b t 1', b=time.shape[0]) + coords = torch.cat([coords, time], dim=-1) + time_reprs = self.inr(coords) + else: + time_reprs = repeat(self.inr(coords), '1 t d -> b t d', b=batch_size) + + lookback_reprs = time_reprs[:, :-tgt_horizon_len] + horizon_reprs = time_reprs[:, -tgt_horizon_len:] + w, b = self.adaptive_weights(lookback_reprs, x) + preds = self.forecast(horizon_reprs, w, b) + return preds + + def forecast(self, inp: Tensor, w: Tensor, b: Tensor) -> Tensor: + return torch.einsum('... d o, ... t d -> ... t o', [w, inp]) + b + + def get_coords(self, lookback_len: int, horizon_len: int) -> Tensor: + coords = torch.linspace(0, 1, lookback_len + horizon_len) + return rearrange(coords, 't -> 1 t 1') diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..8aa1909 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,13 @@ +from typing import Union + +import torch + +from .DeepTIMe import deeptime + + +def get_model(model_type: str, **kwargs: Union[int, float]) -> torch.nn.Module: + if model_type == 'deeptime': + model = deeptime(datetime_feats=kwargs['datetime_feats']) + else: + raise ValueError(f"Unknown model type {model_type}") + return model diff --git a/models/modules/__init__.py b/models/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/models/modules/feature_transforms.py b/models/modules/feature_transforms.py new file mode 100644 index 0000000..d183838 --- /dev/null +++ b/models/modules/feature_transforms.py @@ -0,0 +1,36 @@ +from typing import List, Optional + +import math +import torch +from torch import nn +from torch import Tensor + + +class GaussianFourierFeatureTransform(nn.Module): + """ + https://github.com/ndahlquist/pytorch-fourier-feature-networks + Given an input of size [..., time, dim], returns a tensor of size [..., n_fourier_feats, time]. + """ + def __init__(self, input_dim: int, n_fourier_feats: int, scales: List[int]): + super().__init__() + self.input_dim = input_dim + self.n_fourier_feats = n_fourier_feats + self.scales = scales + + n_scale_feats = n_fourier_feats // (2 * len(scales)) + assert n_scale_feats * 2 * len(scales) == n_fourier_feats, \ + f"n_fourier_feats: {n_fourier_feats} must be divisible by 2 * len(scales) = {2 * len(scales)}" + B_size = (input_dim, n_scale_feats) + B = torch.cat([torch.randn(B_size) * scale for scale in scales], dim=1) + self.register_buffer('B', B) + + def forward(self, x: Tensor) -> Tensor: + assert x.dim() >= 2, f"Expected 2 or more dimensional input (got {x.dim()}D input)" + time, dim = x.shape[-2], x.shape[-1] + + assert dim == self.input_dim, \ + f"Expected input to have {self.input_dim} channels (got {dim} channels)" + + x = torch.einsum('... t n, n d -> ... t d', [x, self.B]) + x = 2 * math.pi * x + return torch.cat([torch.sin(x), torch.cos(x)], dim=-1) diff --git a/models/modules/inr.py b/models/modules/inr.py new file mode 100644 index 0000000..dde2b99 --- /dev/null +++ b/models/modules/inr.py @@ -0,0 +1,42 @@ +from typing import Optional + +import torch +import torch.nn as nn +from torch import Tensor + +from models.modules.feature_transforms import GaussianFourierFeatureTransform + + +class INRLayer(nn.Module): + def __init__(self, input_size: int, output_size: int, + dropout: Optional[float] = 0.1): + super().__init__() + self.input_size = input_size + self.output_size = output_size + self.linear = nn.Linear(input_size, output_size) + self.dropout = nn.Dropout(dropout) + self.norm = nn.LayerNorm(output_size) + + def forward(self, x: Tensor) -> Tensor: + out = self._layer(x) + return self.norm(out) + + def _layer(self, x: Tensor) -> Tensor: + return self.dropout(torch.relu(self.linear(x))) + + +class INR(nn.Module): + def __init__(self, in_feats: int, layers: int, layer_size: int, n_fourier_feats: int, scales: float, + dropout: Optional[float] = 0.1): + super().__init__() + self.features = nn.Linear(in_feats, layer_size) if n_fourier_feats == 0 \ + else GaussianFourierFeatureTransform(in_feats, n_fourier_feats, scales) + in_size = layer_size if n_fourier_feats == 0 \ + else n_fourier_feats + layers = [INRLayer(in_size, layer_size, dropout=dropout)] + \ + [INRLayer(layer_size, layer_size, dropout=dropout) for _ in range(layers - 1)] + self.layers = nn.Sequential(*layers) + + def forward(self, x: Tensor) -> Tensor: + x = self.features(x) + return self.layers(x) diff --git a/models/modules/regressors.py b/models/modules/regressors.py new file mode 100644 index 0000000..a5615e7 --- /dev/null +++ b/models/modules/regressors.py @@ -0,0 +1,40 @@ +from typing import Optional + +import torch +from torch import Tensor +from torch import nn +import torch.nn.functional as F + + +class RidgeRegressor(nn.Module): + def __init__(self, lambda_init: Optional[float] =0.): + super().__init__() + self._lambda = nn.Parameter(torch.as_tensor(lambda_init, dtype=torch.float)) + + def forward(self, reprs: Tensor, x: Tensor, reg_coeff: Optional[float] = None) -> Tensor: + if reg_coeff is None: + reg_coeff = self.reg_coeff() + w, b = self.get_weights(reprs, x, reg_coeff) + return w, b + + def get_weights(self, X: Tensor, Y: Tensor, reg_coeff: float) -> Tensor: + batch_size, n_samples, n_dim = X.shape + ones = torch.ones(batch_size, n_samples, 1, device=X.device) + X = torch.concat([X, ones], dim=-1) + + if n_samples >= n_dim: + # standard + A = torch.bmm(X.mT, X) + A.diagonal(dim1=-2, dim2=-1).add_(reg_coeff) + B = torch.bmm(X.mT, Y) + weights = torch.linalg.solve(A, B) + else: + # Woodbury + A = torch.bmm(X, X.mT) + A.diagonal(dim1=-2, dim2=-1).add_(reg_coeff) + weights = torch.bmm(X.mT, torch.linalg.solve(A, Y)) + + return weights[:, :-1], weights[:, -1:] + + def reg_coeff(self) -> Tensor: + return F.softplus(self._lambda) diff --git a/pics/deeptime.png b/pics/deeptime.png new file mode 100644 index 0000000000000000000000000000000000000000..040e2581f016091e7ed48afb97b15609380ccc25 GIT binary patch literal 276088 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
lVTTM+{ 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 E7u{gK-~a#s literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2a2cc73 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +fire==0.4.0 +functorch==0.1.1 +gin-config==0.5.0 +matplotlib==3.5.1 +numpy ==1.19.2 +pandas==1.4.2 +scikit-learn==1.0.2 +scipy==1.7.3 +tensorboard==2.8.0 +torch==1.11.0 +TorchOpt==0.4.1 +tqdm==4.62.3 +einops==0.4.1 \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..db83ec1 --- /dev/null +++ b/run.sh @@ -0,0 +1,6 @@ +for dataset in ECL ETTm2 Exchange ILI Traffic Weather; do + for instance in `/bin/ls -d storage/experiments/$dataset/*/*`; do + echo $instance + make run command=${instance}/command + done +done diff --git a/run_hp_search.sh b/run_hp_search.sh new file mode 100644 index 0000000..9beccfa --- /dev/null +++ b/run_hp_search.sh @@ -0,0 +1,4 @@ +for instance in `/bin/ls -d storage/experiments/hp_search/*/*`; do + echo $instance + make run command=${instance}/command +done diff --git a/storage/datasets/.gitignore b/storage/datasets/.gitignore new file mode 100644 index 0000000..86d0cb2 --- /dev/null +++ b/storage/datasets/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/storage/experiments/.gitignore b/storage/experiments/.gitignore new file mode 100644 index 0000000..86d0cb2 --- /dev/null +++ b/storage/experiments/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/checkpoint.py b/utils/checkpoint.py new file mode 100644 index 0000000..e702536 --- /dev/null +++ b/utils/checkpoint.py @@ -0,0 +1,59 @@ +from typing import Optional, Dict +import logging +from os.path import join + +import gin +import torch +from torch.utils.tensorboard import SummaryWriter + + +@gin.configurable() +class Checkpoint: + def __init__(self, + checkpoint_dir: str, + patience: Optional[int] = 7, + delta: Optional[float] = 0.): + self.checkpoint_dir = checkpoint_dir + self.model_path = join(checkpoint_dir, 'model.pth') + + # early stopping + self.patience = patience + self.counter = 0 + self.best_loss = float('inf') + self.early_stop = False + self.delta = delta + + # logging + self.summary_writer = SummaryWriter(log_dir=checkpoint_dir) + + def __call__(self, + epoch: int, + model: torch.nn.Module, + scalars: Optional[Dict[str, float]] = None): + for name, value in scalars.items(): + # logging + self.summary_writer.add_scalar(name, value, epoch) + + # early stopping + if name == 'Loss/Val': + val_loss = value + if val_loss <= self.best_loss + self.delta: + logging.info( + f"Validation loss decreased ({self.best_loss:.3f} --> {val_loss:.3f}). Saving model ...") + torch.save(model.state_dict(), self.model_path) + self.best_loss = val_loss + self.counter = 0 + else: + self.counter += 1 + logging.info(f"Validation loss increased ({self.best_loss:.3f} --> {val_loss:.3f}). " + f"Early stopping counter: {self.counter} out of {self.patience}") + if self.counter >= self.patience >= 0: + self.early_stop = True + + self.summary_writer.flush() + + def close(self, scores: Optional[Dict[str, float]] = None): + if scores is not None: + for name, value in scores.items(): + self.summary_writer.add_scalar(name, value) + self.summary_writer.close() \ No newline at end of file diff --git a/utils/losses.py b/utils/losses.py new file mode 100644 index 0000000..af4ac16 --- /dev/null +++ b/utils/losses.py @@ -0,0 +1,15 @@ +from typing import Optional, Callable +from functools import partial + +import torch +import torch.nn.functional as F +from torch import Tensor + + +def get_loss_fn(loss_name: str, + delta: Optional[float] = 1.0, + beta: Optional[float] = 1.0) -> Callable: + return {'mse': F.mse_loss, + 'mae': F.l1_loss, + 'huber': partial(F.huber_loss, delta=delta), + 'smooth_l1': partial(F.smooth_l1_loss, beta=beta)}[loss_name] diff --git a/utils/metrics.py b/utils/metrics.py new file mode 100644 index 0000000..328ac14 --- /dev/null +++ b/utils/metrics.py @@ -0,0 +1,39 @@ +import numpy as np + + +def rse(pred, true): + return np.sqrt(np.sum((true - pred) ** 2)) / np.sqrt(np.sum((true - true.mean()) ** 2)) + + +def corr(pred, true): + u = ((true - true.mean(0)) * (pred - pred.mean(0))).sum(0) + d = np.sqrt(((true - true.mean(0)) ** 2 * (pred - pred.mean(0)) ** 2).sum(0)) + return (u / d).mean(-1) + + +def mae(pred, true): + return np.mean(np.abs(pred - true)) + + +def mse(pred, true): + return np.mean((pred - true) ** 2) + + +def rmse(pred, true): + return np.sqrt(mse(pred, true)) + + +def mape(pred, true): + return np.mean(np.abs((pred - true) / true)) + + +def mspe(pred, true): + return np.mean(np.square((pred - true) / true)) + + +def calc_metrics(pred, true): + return {'mae': mae(pred, true), + 'mse': mse(pred, true), + 'rmse': rmse(pred, true), + 'mape': mape(pred, true), + 'mspe': mspe(pred, true)} diff --git a/utils/ops.py b/utils/ops.py new file mode 100644 index 0000000..f54ad71 --- /dev/null +++ b/utils/ops.py @@ -0,0 +1,54 @@ +from typing import Optional, Tuple + +import numpy as np +import torch +from torch import Tensor +from einops import reduce + + +def default_device() -> torch.device: + """ + PyTorch default device is GPU when available, CPU otherwise. + :return: Default device. + """ + return torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + +def to_tensor(array: np.ndarray, to_default_device: Optional[bool] = True) -> Tensor: + """ + Convert numpy array to tensor on default device. + :param array: Numpy array to convert. + :param to_default_device Place tensor on default device or not. + :return: PyTorch tensor, optionally on default device. + """ + if to_default_device: + return torch.as_tensor(array, dtype=torch.float32).to(default_device()) + + +def divide_no_nan(a, b): + """ + a/b where the resulted NaN or Inf are replaced by 0. + """ + mask = b == .0 + b[mask] = 1. + result = a / b + result[mask] = .0 + result[result != result] = .0 + result[result == np.inf] = .0 + return result + + +def scale(x: Tensor, + scaling_factor: Optional[Tensor] = None) -> Tuple[Tensor, Tensor]: + if scaling_factor is not None: + x = x / scaling_factor + return x, scaling_factor + + scaling_factor = reduce(torch.abs(x).data, 'b t d -> b 1 d', 'mean') + scaling_factor[scaling_factor == 0.0] = 1.0 + x = x / scaling_factor + return x, scaling_factor + + +def descale(forecast: Tensor, scaling_factor: Tensor) -> Tensor: + return forecast * scaling_factor \ No newline at end of file diff --git a/utils/time_features.py b/utils/time_features.py new file mode 100644 index 0000000..f3df998 --- /dev/null +++ b/utils/time_features.py @@ -0,0 +1,182 @@ +from abc import ABC, abstractmethod +from typing import Optional, List, Union + +import numpy as np +import pandas as pd + + +class TimeFeature(ABC): + """Abstract class for time features""" + def __init__(self, normalise: bool, a: float, b: float): + self.normalise = normalise + self.a = a + self.b = b + + @abstractmethod + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + ... + + @property + @abstractmethod + def _max_val(self) -> float: + ... + + @property + def max_val(self) -> float: + return self._max_val if self.normalise else 1.0 + + def scale(self, val: np.ndarray) -> np.ndarray: + return val * (self.b - self.a) + self.a + + def process(self, val: np.ndarray) -> np.ndarray: + features = self.scale(val / self.max_val) + if self.normalise: + return features + return features.astype(int) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(normalise={self.normalise}, a={self.a}, b={self.b})" + + +class SecondOfMinute(TimeFeature): + """Second of minute, unnormalised: [0, 59]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.second) + + @property + def _max_val(self): + return 59.0 + + +class MinuteOfHour(TimeFeature): + """Minute of hour, unnormalised: [0, 59]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.minute) + + @property + def _max_val(self): + return 59.0 + + +class HourOfDay(TimeFeature): + """Hour of day, unnormalised: [0, 23]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.hour) + + @property + def _max_val(self): + return 23.0 + + +class DayOfWeek(TimeFeature): + """Hour of day, unnormalised: [0, 6]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.dayofweek) + + @property + def _max_val(self): + return 6.0 + + +class DayOfMonth(TimeFeature): + """Day of month, unnormalised: [0, 30]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.day - 1) + + @property + def _max_val(self): + return 30.0 + + +class DayOfYear(TimeFeature): + """Day of year, unnormalised: [0, 365]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.dayofyear - 1) + + @property + def _max_val(self): + return 365.0 + + +class WeekOfYear(TimeFeature): + """Week of year, unnormalised: [0, 52]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(pd.Index(idx.isocalendar().week, dtype=int) - 1) + + @property + def _max_val(self): + return 52.0 + +class MonthOfYear(TimeFeature): + """Month of year, unnormalised: [0, 11]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.month - 1) + + @property + def _max_val(self): + return 11.0 + + +class QuarterOfYear(TimeFeature): + """Quarter of year, unnormalised: [0, 3]""" + def __call__(self, idx: pd.DatetimeIndex) -> np.ndarray: + return self.process(idx.quarter - 1) + + @property + def _max_val(self): + return 3.0 + + +str_to_feat = { + # dictionary mapping name to TimeFeature function + 'SecondOfMinute': SecondOfMinute, + 'MinuteOfHour': MinuteOfHour, + 'HourOfDay': HourOfDay, + 'DayOfWeek': DayOfWeek, + 'DayOfMonth': DayOfMonth, + 'DayOfYear': DayOfYear, + 'WeekOfYear': WeekOfYear, + 'MonthOfYear': MonthOfYear, + 'QuarterOfYear': QuarterOfYear, +} + + +freq_to_feats = { + # dictionary mapping frequency to list of TimeFeature functions + 'q': [QuarterOfYear], + 'm': [QuarterOfYear, MonthOfYear], + 'w': [QuarterOfYear, MonthOfYear, WeekOfYear], + 'd': [QuarterOfYear, MonthOfYear, WeekOfYear, DayOfYear, DayOfMonth, DayOfWeek], + 'h': [QuarterOfYear, MonthOfYear, WeekOfYear, DayOfYear, DayOfMonth, DayOfWeek, HourOfDay], + 't': [QuarterOfYear, MonthOfYear, WeekOfYear, DayOfYear, DayOfMonth, DayOfWeek, HourOfDay, MinuteOfHour], + 's': [QuarterOfYear, MonthOfYear, WeekOfYear, DayOfYear, DayOfMonth, DayOfWeek, HourOfDay, MinuteOfHour, SecondOfMinute], +} + + +def get_time_features(dates: pd.DatetimeIndex, normalise: bool, a: Optional[float] = 0., b: Optional[float] = 1., + features: Optional[Union[str, List[str]]] = None) -> np.ndarray: + """ + Returns a numpy array of date/time features based on either frequency or directly specifying a list of features. + :param dates: DatetimeIndex object of shape (time,) + :param normalise: Whether to normalise feature between [a, b]. If not, return as an int in the original feature range. + :param a: Lower bound of feature + :param b: Upper bound of feature + :param features: Frequency string used to obtain list of TimeFeatures, or directly a list of names of TimeFeatures + :return: np array of date/time features of shape (time, n_feats) + """ + if isinstance(features, list): + assert all([feat in str_to_feat.keys() for feat in features]), \ + f"items in list should be one of {[*str_to_feat.keys()]}" + features = [str_to_feat[feat] for feat in features] + elif isinstance(features, str): + assert features in freq_to_feats.keys(), \ + f"features should be one of {[*freq_to_feats.keys()]}" + features = freq_to_feats[features] + else: + raise ValueError(f"features should be a list or str, not a {type(features)}") + + features = [feat(normalise, a, b)(dates) for feat in features] + + if len(features) == 0: + return np.empty((dates.shape[0], 0)) + return np.stack(features, axis=1)