# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/models.ipynb. # %% auto 0 __all__ = ['AutoRNN', 'AutoLSTM', 'AutoGRU', 'AutoTCN', 'AutoDeepAR', 'AutoDilatedRNN', 'AutoBiTCN', 'AutoMLP', 'AutoNBEATS', 'AutoNBEATSx', 'AutoNHITS', 'AutoDLinear', 'AutoNLinear', 'AutoTFT', 'AutoVanillaTransformer', 'AutoInformer', 'AutoAutoformer', 'AutoFEDformer', 'AutoPatchTST', 'AutoiTransformer', 'AutoTimesNet', 'AutoStemGNN', 'AutoHINT', 'AutoTSMixer', 'AutoTSMixerx', 'AutoMLPMultivariate'] # %% ../nbs/models.ipynb 2 from os import cpu_count import torch from ray import tune from ray.tune.search.basic_variant import BasicVariantGenerator from .common._base_auto import BaseAuto from .common._base_auto import MockTrial from .models.rnn import RNN from .models.gru import GRU from .models.tcn import TCN from .models.lstm import LSTM from .models.deepar import DeepAR from .models.dilated_rnn import DilatedRNN from .models.bitcn import BiTCN from .models.mlp import MLP from .models.nbeats import NBEATS from .models.nbeatsx import NBEATSx from .models.nhits import NHITS from .models.dlinear import DLinear from .models.nlinear import NLinear from .models.tft import TFT from .models.vanillatransformer import VanillaTransformer from .models.informer import Informer from .models.autoformer import Autoformer from .models.fedformer import FEDformer from .models.patchtst import PatchTST from .models.timesnet import TimesNet from .models.itransformer import iTransformer from .models.stemgnn import StemGNN from .models.hint import HINT from .models.tsmixer import TSMixer from .models.tsmixerx import TSMixerx from .models.mlpmultivariate import MLPMultivariate from .losses.pytorch import MAE, MQLoss, DistributionLoss # %% ../nbs/models.ipynb 13 class AutoRNN(BaseAuto): default_config = { "input_size_multiplier": [-1, 4, 16, 64], "inference_input_size_multiplier": [-1], "h": None, "encoder_hidden_size": tune.choice([50, 100, 200, 300]), "encoder_n_layers": tune.randint(1, 4), "context_size": tune.choice([5, 10, 50]), "decoder_hidden_size": tune.choice([64, 128, 256, 512]), "learning_rate": tune.loguniform(1e-4, 1e-1), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([16, 32]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): """Auto RNN **Parameters:**
""" # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoRNN, self).__init__( cls_model=RNN, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["inference_input_size"] = tune.choice( [h * x for x in config["inference_input_size_multiplier"]] ) del config["input_size_multiplier"], config["inference_input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 17 class AutoLSTM(BaseAuto): default_config = { "input_size_multiplier": [-1, 4, 16, 64], "inference_input_size_multiplier": [-1], "h": None, "encoder_hidden_size": tune.choice([50, 100, 200, 300]), "encoder_n_layers": tune.randint(1, 4), "context_size": tune.choice([5, 10, 50]), "decoder_hidden_size": tune.choice([64, 128, 256, 512]), "learning_rate": tune.loguniform(1e-4, 1e-1), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([16, 32]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoLSTM, self).__init__( cls_model=LSTM, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["inference_input_size"] = tune.choice( [h * x for x in config["inference_input_size_multiplier"]] ) del config["input_size_multiplier"], config["inference_input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 21 class AutoGRU(BaseAuto): default_config = { "input_size_multiplier": [-1, 4, 16, 64], "inference_input_size_multiplier": [-1], "h": None, "encoder_hidden_size": tune.choice([50, 100, 200, 300]), "encoder_n_layers": tune.randint(1, 4), "context_size": tune.choice([5, 10, 50]), "decoder_hidden_size": tune.choice([64, 128, 256, 512]), "learning_rate": tune.loguniform(1e-4, 1e-1), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([16, 32]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoGRU, self).__init__( cls_model=GRU, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["inference_input_size"] = tune.choice( [h * x for x in config["inference_input_size_multiplier"]] ) del config["input_size_multiplier"], config["inference_input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 25 class AutoTCN(BaseAuto): default_config = { "input_size_multiplier": [-1, 4, 16, 64], "inference_input_size_multiplier": [-1], "h": None, "encoder_hidden_size": tune.choice([50, 100, 200, 300]), "context_size": tune.choice([5, 10, 50]), "decoder_hidden_size": tune.choice([64, 128]), "learning_rate": tune.loguniform(1e-4, 1e-1), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([16, 32]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoTCN, self).__init__( cls_model=TCN, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["inference_input_size"] = tune.choice( [h * x for x in config["inference_input_size_multiplier"]] ) del config["input_size_multiplier"], config["inference_input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 29 class AutoDeepAR(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "lstm_hidden_size": tune.choice([32, 64, 128, 256]), "lstm_n_layers": tune.randint(1, 4), "lstm_dropout": tune.uniform(0.0, 0.5), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice(["robust", "minmax1"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=DistributionLoss( distribution="StudentT", level=[80, 90], return_params=False ), valid_loss=MQLoss(level=[80, 90]), config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoDeepAR, self).__init__( cls_model=DeepAR, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 33 class AutoDilatedRNN(BaseAuto): default_config = { "input_size_multiplier": [-1, 4, 16, 64], "inference_input_size_multiplier": [-1], "h": None, "cell_type": tune.choice(["LSTM", "GRU"]), "encoder_hidden_size": tune.choice([50, 100, 200, 300]), "dilations": tune.choice([[[1, 2], [4, 8]], [[1, 2, 4, 8]]]), "context_size": tune.choice([5, 10, 50]), "decoder_hidden_size": tune.choice([64, 128, 256, 512]), "learning_rate": tune.loguniform(1e-4, 1e-1), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([16, 32]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoDilatedRNN, self).__init__( cls_model=DilatedRNN, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["inference_input_size"] = tune.choice( [h * x for x in config["inference_input_size_multiplier"]] ) del config["input_size_multiplier"], config["inference_input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 37 class AutoBiTCN(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([16, 32]), "dropout": tune.uniform(0.0, 0.99), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoBiTCN, self).__init__( cls_model=BiTCN, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 42 class AutoMLP(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([256, 512, 1024]), "num_layers": tune.randint(2, 6), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoMLP, self).__init__( cls_model=MLP, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 46 class AutoNBEATS(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoNBEATS, self).__init__( cls_model=NBEATS, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 50 class AutoNBEATSx(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoNBEATSx, self).__init__( cls_model=NBEATSx, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 54 class AutoNHITS(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "n_pool_kernel_size": tune.choice( [[2, 2, 1], 3 * [1], 3 * [2], 3 * [4], [8, 4, 1], [16, 8, 1]] ), "n_freq_downsample": tune.choice( [ [168, 24, 1], [24, 12, 1], [180, 60, 1], [60, 8, 1], [40, 20, 1], [1, 1, 1], ] ), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.quniform(lower=500, upper=1500, q=100), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(lower=1, upper=20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoNHITS, self).__init__( cls_model=NHITS, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 58 class AutoDLinear(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "moving_avg_window": tune.choice([11, 25, 51]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.quniform(lower=500, upper=1500, q=100), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(lower=1, upper=20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoDLinear, self).__init__( cls_model=DLinear, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 62 class AutoNLinear(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.quniform(lower=500, upper=1500, q=100), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(lower=1, upper=20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoNLinear, self).__init__( cls_model=NLinear, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 67 class AutoTFT(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([64, 128, 256]), "n_head": tune.choice([4, 8]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoTFT, self).__init__( cls_model=TFT, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 71 class AutoVanillaTransformer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([64, 128, 256]), "n_head": tune.choice([4, 8]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoVanillaTransformer, self).__init__( cls_model=VanillaTransformer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 75 class AutoInformer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([64, 128, 256]), "n_head": tune.choice([4, 8]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoInformer, self).__init__( cls_model=Informer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 79 class AutoAutoformer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([64, 128, 256]), "n_head": tune.choice([4, 8]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoAutoformer, self).__init__( cls_model=Autoformer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 83 class AutoFEDformer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([64, 128, 256]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoFEDformer, self).__init__( cls_model=FEDformer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 87 class AutoPatchTST(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3], "h": None, "hidden_size": tune.choice([16, 128, 256]), "n_heads": tune.choice([4, 16]), "patch_len": tune.choice([16, 24]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "revin": tune.choice([False, True]), "max_steps": tune.choice([500, 1000, 5000]), "batch_size": tune.choice([32, 64, 128, 256]), "windows_batch_size": tune.choice([128, 256, 512, 1024]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoPatchTST, self).__init__( cls_model=PatchTST, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 91 class AutoiTransformer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "n_series": None, "hidden_size": tune.choice([64, 128, 256]), "n_heads": tune.choice([4, 8]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, n_series, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend, n_series=n_series) # Always use n_series from parameters, raise exception with Optuna because we can't enforce it if backend == "ray": config["n_series"] = n_series elif backend == "optuna": mock_trial = MockTrial() if ( "n_series" in config(mock_trial) and config(mock_trial)["n_series"] != n_series ) or ("n_series" not in config(mock_trial)): raise Exception(f"config needs 'n_series': {n_series}") super(AutoiTransformer, self).__init__( cls_model=iTransformer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) # Rolling windows with step_size=1 or step_size=h # See `BaseWindows` and `BaseRNN`'s create_windows config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": # Always use n_series from parameters config["n_series"] = n_series config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 96 class AutoTimesNet(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "hidden_size": tune.choice([32, 64, 128]), "conv_hidden_size": tune.choice([32, 64, 128]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice(["robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128]), "windows_batch_size": tune.choice([32, 64, 128, 256]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend) super(AutoTimesNet, self).__init__( cls_model=TimesNet, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series=None): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 101 class AutoStemGNN(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4], "h": None, "n_series": None, "n_stacks": tune.choice([2]), "multi_layer": tune.choice([3, 5, 7]), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, n_series, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend, n_series=n_series) # Always use n_series from parameters, raise exception with Optuna because we can't enforce it if backend == "ray": config["n_series"] = n_series elif backend == "optuna": mock_trial = MockTrial() if ( "n_series" in config(mock_trial) and config(mock_trial)["n_series"] != n_series ) or ("n_series" not in config(mock_trial)): raise Exception(f"config needs 'n_series': {n_series}") super(AutoStemGNN, self).__init__( cls_model=StemGNN, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) # Rolling windows with step_size=1 or step_size=h # See `BaseWindows` and `BaseRNN`'s create_windows config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": # Always use n_series from parameters config["n_series"] = n_series config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 105 class AutoHINT(BaseAuto): def __init__( self, cls_model, h, loss, valid_loss, S, config, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, cpus=cpu_count(), gpus=torch.cuda.device_count(), refit_with_val=False, verbose=False, alias=None, backend="ray", callbacks=None, ): super(AutoHINT, self).__init__( cls_model=cls_model, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) if backend == "optuna": raise Exception("Optuna is not supported for AutoHINT.") # Validate presence of reconciliation strategy # parameter in configuration space if not ("reconciliation" in config.keys()): raise Exception( "config needs reconciliation, \ try tune.choice(['BottomUp', 'MinTraceOLS', 'MinTraceWLS'])" ) self.S = S def _fit_model( self, cls_model, config, dataset, val_size, test_size, distributed_config=None ): # Overwrite _fit_model for HINT two-stage instantiation reconciliation = config.pop("reconciliation") base_model = cls_model(**config) model = HINT( h=base_model.h, model=base_model, S=self.S, reconciliation=reconciliation ) model.test_size = test_size model = model.fit( dataset, val_size=val_size, test_size=test_size, distributed_config=distributed_config, ) return model @classmethod def get_default_config(cls, h, backend, n_series=None): raise Exception("AutoHINT has no default configuration.") # %% ../nbs/models.ipynb 110 class AutoTSMixer(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4], "h": None, "n_series": None, "n_block": tune.choice([1, 2, 4, 6, 8]), "learning_rate": tune.loguniform(1e-4, 1e-2), "ff_dim": tune.choice([32, 64, 128]), "scaler_type": tune.choice(["identity", "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "dropout": tune.uniform(0.0, 0.99), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, n_series, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend, n_series=n_series) # Always use n_series from parameters, raise exception with Optuna because we can't enforce it if backend == "ray": config["n_series"] = n_series elif backend == "optuna": mock_trial = MockTrial() if ( "n_series" in config(mock_trial) and config(mock_trial)["n_series"] != n_series ) or ("n_series" not in config(mock_trial)): raise Exception(f"config needs 'n_series': {n_series}") super(AutoTSMixer, self).__init__( cls_model=TSMixer, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) # Rolling windows with step_size=1 or step_size=h # See `BaseWindows` and `BaseRNN`'s create_windows config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": # Always use n_series from parameters config["n_series"] = n_series config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 114 class AutoTSMixerx(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4], "h": None, "n_series": None, "n_block": tune.choice([1, 2, 4, 6, 8]), "learning_rate": tune.loguniform(1e-4, 1e-2), "ff_dim": tune.choice([32, 64, 128]), "scaler_type": tune.choice(["identity", "robust", "standard"]), "max_steps": tune.choice([500, 1000, 2000]), "batch_size": tune.choice([32, 64, 128, 256]), "dropout": tune.uniform(0.0, 0.99), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, n_series, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend, n_series=n_series) # Always use n_series from parameters, raise exception with Optuna because we can't enforce it if backend == "ray": config["n_series"] = n_series elif backend == "optuna": mock_trial = MockTrial() if ( "n_series" in config(mock_trial) and config(mock_trial)["n_series"] != n_series ) or ("n_series" not in config(mock_trial)): raise Exception(f"config needs 'n_series': {n_series}") super(AutoTSMixerx, self).__init__( cls_model=TSMixerx, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) # Rolling windows with step_size=1 or step_size=h # See `BaseWindows` and `BaseRNN`'s create_windows config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": # Always use n_series from parameters config["n_series"] = n_series config = cls._ray_config_to_optuna(config) return config # %% ../nbs/models.ipynb 118 class AutoMLPMultivariate(BaseAuto): default_config = { "input_size_multiplier": [1, 2, 3, 4, 5], "h": None, "n_series": None, "hidden_size": tune.choice([256, 512, 1024]), "num_layers": tune.randint(2, 6), "learning_rate": tune.loguniform(1e-4, 1e-1), "scaler_type": tune.choice([None, "robust", "standard"]), "max_steps": tune.choice([500, 1000]), "batch_size": tune.choice([32, 64, 128, 256]), "loss": None, "random_seed": tune.randint(1, 20), } def __init__( self, h, n_series, loss=MAE(), valid_loss=None, config=None, search_alg=BasicVariantGenerator(random_state=1), num_samples=10, refit_with_val=False, cpus=cpu_count(), gpus=torch.cuda.device_count(), verbose=False, alias=None, backend="ray", callbacks=None, ): # Define search space, input/output sizes if config is None: config = self.get_default_config(h=h, backend=backend, n_series=n_series) # Always use n_series from parameters, raise exception with Optuna because we can't enforce it if backend == "ray": config["n_series"] = n_series elif backend == "optuna": mock_trial = MockTrial() if ( "n_series" in config(mock_trial) and config(mock_trial)["n_series"] != n_series ) or ("n_series" not in config(mock_trial)): raise Exception(f"config needs 'n_series': {n_series}") super(AutoMLPMultivariate, self).__init__( cls_model=MLPMultivariate, h=h, loss=loss, valid_loss=valid_loss, config=config, search_alg=search_alg, num_samples=num_samples, refit_with_val=refit_with_val, cpus=cpus, gpus=gpus, verbose=verbose, alias=alias, backend=backend, callbacks=callbacks, ) @classmethod def get_default_config(cls, h, backend, n_series): config = cls.default_config.copy() config["input_size"] = tune.choice( [h * x for x in config["input_size_multiplier"]] ) # Rolling windows with step_size=1 or step_size=h # See `BaseWindows` and `BaseRNN`'s create_windows config["step_size"] = tune.choice([1, h]) del config["input_size_multiplier"] if backend == "optuna": # Always use n_series from parameters config["n_series"] = n_series config = cls._ray_config_to_optuna(config) return config