mirror of
https://github.com/wassname/pytorch-transformer-ts.git
synced 2026-07-21 12:50:20 +08:00
437 KiB
437 KiB
In [1]:
%matplotlib inline
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
from itertools import isliceIn [2]:
from gluonts.evaluation import make_evaluation_predictions, Evaluator
from gluonts.dataset.repository.datasets import get_dataset
from estimator import PerceiverAREstimatorIn [3]:
dataset = get_dataset("electricity")In [4]:
estimator = PerceiverAREstimator(
depth=2,
heads=2,
freq=dataset.metadata.freq,
prediction_length=dataset.metadata.prediction_length,
context_length=dataset.metadata.prediction_length*10,
num_feat_static_cat=1,
cardinality=[321],
embedding_dimension=[3],
batch_size=128,
num_batches_per_epoch=100,
trainer_kwargs=dict(max_epochs=50, accelerator='gpu', devices=1,),
)In [5]:
predictor = estimator.train(
training_data=dataset.train,
validation_data=dataset.test,
num_workers=8,
shuffle_buffer_length=4000,
)/home/kashif/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/utilities/parsing.py:261: UserWarning: Attribute 'model' is an instance of `nn.Module` and is already saved during checkpointing. It is recommended to ignore them using `self.save_hyperparameters(ignore=['model'])`. rank_zero_warn( Using bfloat16 Automatic Mixed Precision (AMP) GPU available: True (cuda), used: True TPU available: False, using: 0 TPU cores IPU available: False, using: 0 IPUs HPU available: False, using: 0 HPUs LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0] | Name | Type | Params ------------------------------------------- 0 | model | PerceiverARModel | 55.3 K ------------------------------------------- 55.3 K Trainable params 0 Non-trainable params 55.3 K Total params 0.221 Total estimated model params size (MB)
Sanity Checking: 0it [00:00, ?it/s]
Training: 0it [00:00, ?it/s]
Validation: 0it [00:00, ?it/s]
Epoch 0, global step 100: 'val_loss' reached 5.44867 (best 5.44867), saving model to '/mnt/scratch/kashif/pytorch-transformer-ts/perceiverar/lightning_logs/version_32/checkpoints/epoch=0-step=100.ckpt' as top 1
Validation: 0it [00:00, ?it/s]
Epoch 1, global step 200: 'val_loss' reached 5.35806 (best 5.35806), saving model to '/mnt/scratch/kashif/pytorch-transformer-ts/perceiverar/lightning_logs/version_32/checkpoints/epoch=1-step=200.ckpt' as top 1
Validation: 0it [00:00, ?it/s]
Epoch 2, global step 300: 'val_loss' was not in top 1
Validation: 0it [00:00, ?it/s]
Epoch 3, global step 400: 'val_loss' was not in top 1
[0;31m---------------------------------------------------------------------------[0m [0;31mValueError[0m Traceback (most recent call last) [1;32m/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb Cell 5[0m in [0;36m<cell line: 1>[0;34m()[0m [0;32m----> <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a>[0m predictor [39m=[39m estimator[39m.[39;49mtrain( [1;32m <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=1'>2</a>[0m training_data[39m=[39;49mdataset[39m.[39;49mtrain, [1;32m <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=2'>3</a>[0m validation_data[39m=[39;49mdataset[39m.[39;49mtest, [1;32m <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=3'>4</a>[0m num_workers[39m=[39;49m[39m8[39;49m, [1;32m <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=4'>5</a>[0m shuffle_buffer_length[39m=[39;49m[39m1024[39;49m [1;32m <a href='vscode-notebook-cell://ssh-remote%2Brirs7fpdysrvpdl8.myfritz.net/home/kashif/scratch/pytorch-transformer-ts/perceiverar/perceiverar.ipynb#W4sdnNjb2RlLXJlbW90ZQ%3D%3D?line=5'>6</a>[0m ) File [0;32m~/gluon-ts-PR/src/gluonts/torch/model/estimator.py:230[0m, in [0;36mPyTorchLightningEstimator.train[0;34m(self, training_data, validation_data, num_workers, shuffle_buffer_length, cache_data, ckpt_path, **kwargs)[0m [1;32m 220[0m [39mdef[39;00m [39mtrain[39m( [1;32m 221[0m [39mself[39m, [1;32m 222[0m training_data: Dataset, [0;32m (...)[0m [1;32m 228[0m [39m*[39m[39m*[39mkwargs, [1;32m 229[0m ) [39m-[39m[39m>[39m PyTorchPredictor: [0;32m--> 230[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49mtrain_model( [1;32m 231[0m training_data, [1;32m 232[0m validation_data, [1;32m 233[0m num_workers[39m=[39;49mnum_workers, [1;32m 234[0m shuffle_buffer_length[39m=[39;49mshuffle_buffer_length, [1;32m 235[0m cache_data[39m=[39;49mcache_data, [1;32m 236[0m ckpt_path[39m=[39;49mckpt_path, [1;32m 237[0m [39m*[39;49m[39m*[39;49mkwargs, [1;32m 238[0m )[39m.[39mpredictor File [0;32m~/gluon-ts-PR/src/gluonts/torch/model/estimator.py:197[0m, in [0;36mPyTorchLightningEstimator.train_model[0;34m(self, training_data, validation_data, num_workers, shuffle_buffer_length, cache_data, ckpt_path, **kwargs)[0m [1;32m 194[0m trainer_kwargs [39m=[39m {[39m*[39m[39m*[39m[39mself[39m[39m.[39mtrainer_kwargs, [39m"[39m[39mcallbacks[39m[39m"[39m: callbacks} [1;32m 195[0m trainer [39m=[39m pl[39m.[39mTrainer([39m*[39m[39m*[39mtrainer_kwargs) [0;32m--> 197[0m trainer[39m.[39;49mfit( [1;32m 198[0m model[39m=[39;49mtraining_network, [1;32m 199[0m train_dataloaders[39m=[39;49mtraining_data_loader, [1;32m 200[0m val_dataloaders[39m=[39;49mvalidation_data_loader, [1;32m 201[0m ckpt_path[39m=[39;49mckpt_path, [1;32m 202[0m ) [1;32m 204[0m logger[39m.[39minfo([39mf[39m[39m"[39m[39mLoading best model from [39m[39m{[39;00mcheckpoint[39m.[39mbest_model_path[39m}[39;00m[39m"[39m) [1;32m 205[0m best_model [39m=[39m training_network[39m.[39mload_from_checkpoint( [1;32m 206[0m checkpoint[39m.[39mbest_model_path [1;32m 207[0m ) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:696[0m, in [0;36mTrainer.fit[0;34m(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path)[0m [1;32m 677[0m [39mr[39m[39m"""[39;00m [1;32m 678[0m [39mRuns the full optimization routine.[39;00m [1;32m 679[0m [0;32m (...)[0m [1;32m 693[0m [39m datamodule: An instance of :class:`~pytorch_lightning.core.datamodule.LightningDataModule`.[39;00m [1;32m 694[0m [39m"""[39;00m [1;32m 695[0m [39mself[39m[39m.[39mstrategy[39m.[39mmodel [39m=[39m model [0;32m--> 696[0m [39mself[39;49m[39m.[39;49m_call_and_handle_interrupt( [1;32m 697[0m [39mself[39;49m[39m.[39;49m_fit_impl, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path [1;32m 698[0m ) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:650[0m, in [0;36mTrainer._call_and_handle_interrupt[0;34m(self, trainer_fn, *args, **kwargs)[0m [1;32m 648[0m [39mreturn[39;00m [39mself[39m[39m.[39mstrategy[39m.[39mlauncher[39m.[39mlaunch(trainer_fn, [39m*[39margs, trainer[39m=[39m[39mself[39m, [39m*[39m[39m*[39mkwargs) [1;32m 649[0m [39melse[39;00m: [0;32m--> 650[0m [39mreturn[39;00m trainer_fn([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 651[0m [39m# TODO(awaelchli): Unify both exceptions below, where `KeyboardError` doesn't re-raise[39;00m [1;32m 652[0m [39mexcept[39;00m [39mKeyboardInterrupt[39;00m [39mas[39;00m exception: File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:737[0m, in [0;36mTrainer._fit_impl[0;34m(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path)[0m [1;32m 733[0m ckpt_path [39m=[39m ckpt_path [39mor[39;00m [39mself[39m[39m.[39mresume_from_checkpoint [1;32m 734[0m [39mself[39m[39m.[39m_ckpt_path [39m=[39m [39mself[39m[39m.[39m__set_ckpt_path( [1;32m 735[0m ckpt_path, model_provided[39m=[39m[39mTrue[39;00m, model_connected[39m=[39m[39mself[39m[39m.[39mlightning_module [39mis[39;00m [39mnot[39;00m [39mNone[39;00m [1;32m 736[0m ) [0;32m--> 737[0m results [39m=[39m [39mself[39;49m[39m.[39;49m_run(model, ckpt_path[39m=[39;49m[39mself[39;49m[39m.[39;49mckpt_path) [1;32m 739[0m [39massert[39;00m [39mself[39m[39m.[39mstate[39m.[39mstopped [1;32m 740[0m [39mself[39m[39m.[39mtraining [39m=[39m [39mFalse[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:1168[0m, in [0;36mTrainer._run[0;34m(self, model, ckpt_path)[0m [1;32m 1164[0m [39mself[39m[39m.[39m_checkpoint_connector[39m.[39mrestore_training_state() [1;32m 1166[0m [39mself[39m[39m.[39m_checkpoint_connector[39m.[39mresume_end() [0;32m-> 1168[0m results [39m=[39m [39mself[39;49m[39m.[39;49m_run_stage() [1;32m 1170[0m log[39m.[39mdetail([39mf[39m[39m"[39m[39m{[39;00m[39mself[39m[39m.[39m[39m__class__[39m[39m.[39m[39m__name__[39m[39m}[39;00m[39m: trainer tearing down[39m[39m"[39m) [1;32m 1171[0m [39mself[39m[39m.[39m_teardown() File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:1254[0m, in [0;36mTrainer._run_stage[0;34m(self)[0m [1;32m 1252[0m [39mif[39;00m [39mself[39m[39m.[39mpredicting: [1;32m 1253[0m [39mreturn[39;00m [39mself[39m[39m.[39m_run_predict() [0;32m-> 1254[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49m_run_train() File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:1285[0m, in [0;36mTrainer._run_train[0;34m(self)[0m [1;32m 1282[0m [39mself[39m[39m.[39mfit_loop[39m.[39mtrainer [39m=[39m [39mself[39m [1;32m 1284[0m [39mwith[39;00m torch[39m.[39mautograd[39m.[39mset_detect_anomaly([39mself[39m[39m.[39m_detect_anomaly): [0;32m-> 1285[0m [39mself[39;49m[39m.[39;49mfit_loop[39m.[39;49mrun() File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/loop.py:200[0m, in [0;36mLoop.run[0;34m(self, *args, **kwargs)[0m [1;32m 198[0m [39mtry[39;00m: [1;32m 199[0m [39mself[39m[39m.[39mon_advance_start([39m*[39margs, [39m*[39m[39m*[39mkwargs) [0;32m--> 200[0m [39mself[39;49m[39m.[39;49madvance([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 201[0m [39mself[39m[39m.[39mon_advance_end() [1;32m 202[0m [39mself[39m[39m.[39m_restarting [39m=[39m [39mFalse[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/fit_loop.py:270[0m, in [0;36mFitLoop.advance[0;34m(self)[0m [1;32m 266[0m [39mself[39m[39m.[39m_data_fetcher[39m.[39msetup( [1;32m 267[0m dataloader, batch_to_device[39m=[39mpartial([39mself[39m[39m.[39mtrainer[39m.[39m_call_strategy_hook, [39m"[39m[39mbatch_to_device[39m[39m"[39m, dataloader_idx[39m=[39m[39m0[39m) [1;32m 268[0m ) [1;32m 269[0m [39mwith[39;00m [39mself[39m[39m.[39mtrainer[39m.[39mprofiler[39m.[39mprofile([39m"[39m[39mrun_training_epoch[39m[39m"[39m): [0;32m--> 270[0m [39mself[39m[39m.[39m_outputs [39m=[39m [39mself[39;49m[39m.[39;49mepoch_loop[39m.[39;49mrun([39mself[39;49m[39m.[39;49m_data_fetcher) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/loop.py:200[0m, in [0;36mLoop.run[0;34m(self, *args, **kwargs)[0m [1;32m 198[0m [39mtry[39;00m: [1;32m 199[0m [39mself[39m[39m.[39mon_advance_start([39m*[39margs, [39m*[39m[39m*[39mkwargs) [0;32m--> 200[0m [39mself[39;49m[39m.[39;49madvance([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 201[0m [39mself[39m[39m.[39mon_advance_end() [1;32m 202[0m [39mself[39m[39m.[39m_restarting [39m=[39m [39mFalse[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/epoch/training_epoch_loop.py:203[0m, in [0;36mTrainingEpochLoop.advance[0;34m(self, data_fetcher)[0m [1;32m 200[0m [39mself[39m[39m.[39mbatch_progress[39m.[39mincrement_started() [1;32m 202[0m [39mwith[39;00m [39mself[39m[39m.[39mtrainer[39m.[39mprofiler[39m.[39mprofile([39m"[39m[39mrun_training_batch[39m[39m"[39m): [0;32m--> 203[0m batch_output [39m=[39m [39mself[39;49m[39m.[39;49mbatch_loop[39m.[39;49mrun(kwargs) [1;32m 205[0m [39mself[39m[39m.[39mbatch_progress[39m.[39mincrement_processed() [1;32m 207[0m [39m# update non-plateau LR schedulers[39;00m [1;32m 208[0m [39m# update epoch-interval ones only when we are at the end of training epoch[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/loop.py:200[0m, in [0;36mLoop.run[0;34m(self, *args, **kwargs)[0m [1;32m 198[0m [39mtry[39;00m: [1;32m 199[0m [39mself[39m[39m.[39mon_advance_start([39m*[39margs, [39m*[39m[39m*[39mkwargs) [0;32m--> 200[0m [39mself[39;49m[39m.[39;49madvance([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 201[0m [39mself[39m[39m.[39mon_advance_end() [1;32m 202[0m [39mself[39m[39m.[39m_restarting [39m=[39m [39mFalse[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/batch/training_batch_loop.py:87[0m, in [0;36mTrainingBatchLoop.advance[0;34m(self, kwargs)[0m [1;32m 83[0m [39mif[39;00m [39mself[39m[39m.[39mtrainer[39m.[39mlightning_module[39m.[39mautomatic_optimization: [1;32m 84[0m optimizers [39m=[39m _get_active_optimizers( [1;32m 85[0m [39mself[39m[39m.[39mtrainer[39m.[39moptimizers, [39mself[39m[39m.[39mtrainer[39m.[39moptimizer_frequencies, kwargs[39m.[39mget([39m"[39m[39mbatch_idx[39m[39m"[39m, [39m0[39m) [1;32m 86[0m ) [0;32m---> 87[0m outputs [39m=[39m [39mself[39;49m[39m.[39;49moptimizer_loop[39m.[39;49mrun(optimizers, kwargs) [1;32m 88[0m [39melse[39;00m: [1;32m 89[0m outputs [39m=[39m [39mself[39m[39m.[39mmanual_loop[39m.[39mrun(kwargs) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/loop.py:200[0m, in [0;36mLoop.run[0;34m(self, *args, **kwargs)[0m [1;32m 198[0m [39mtry[39;00m: [1;32m 199[0m [39mself[39m[39m.[39mon_advance_start([39m*[39margs, [39m*[39m[39m*[39mkwargs) [0;32m--> 200[0m [39mself[39;49m[39m.[39;49madvance([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 201[0m [39mself[39m[39m.[39mon_advance_end() [1;32m 202[0m [39mself[39m[39m.[39m_restarting [39m=[39m [39mFalse[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:201[0m, in [0;36mOptimizerLoop.advance[0;34m(self, optimizers, kwargs)[0m [1;32m 198[0m [39mdef[39;00m [39madvance[39m([39mself[39m, optimizers: List[Tuple[[39mint[39m, Optimizer]], kwargs: OrderedDict) [39m-[39m[39m>[39m [39mNone[39;00m: [39m# type: ignore[override][39;00m [1;32m 199[0m kwargs [39m=[39m [39mself[39m[39m.[39m_build_kwargs(kwargs, [39mself[39m[39m.[39moptimizer_idx, [39mself[39m[39m.[39m_hiddens) [0;32m--> 201[0m result [39m=[39m [39mself[39;49m[39m.[39;49m_run_optimization(kwargs, [39mself[39;49m[39m.[39;49m_optimizers[[39mself[39;49m[39m.[39;49moptim_progress[39m.[39;49moptimizer_position]) [1;32m 202[0m [39mif[39;00m result[39m.[39mloss [39mis[39;00m [39mnot[39;00m [39mNone[39;00m: [1;32m 203[0m [39m# automatic optimization assumes a loss needs to be returned for extras to be considered as the batch[39;00m [1;32m 204[0m [39m# would be skipped otherwise[39;00m [1;32m 205[0m [39mself[39m[39m.[39m_outputs[[39mself[39m[39m.[39moptimizer_idx] [39m=[39m result[39m.[39masdict() File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:248[0m, in [0;36mOptimizerLoop._run_optimization[0;34m(self, kwargs, optimizer)[0m [1;32m 240[0m closure() [1;32m 242[0m [39m# ------------------------------[39;00m [1;32m 243[0m [39m# BACKWARD PASS[39;00m [1;32m 244[0m [39m# ------------------------------[39;00m [1;32m 245[0m [39m# gradient update with accumulated gradients[39;00m [1;32m 246[0m [39melse[39;00m: [1;32m 247[0m [39m# the `batch_idx` is optional with inter-batch parallelism[39;00m [0;32m--> 248[0m [39mself[39;49m[39m.[39;49m_optimizer_step(optimizer, opt_idx, kwargs[39m.[39;49mget([39m"[39;49m[39mbatch_idx[39;49m[39m"[39;49m, [39m0[39;49m), closure) [1;32m 250[0m result [39m=[39m closure[39m.[39mconsume_result() [1;32m 252[0m [39mif[39;00m result[39m.[39mloss [39mis[39;00m [39mnot[39;00m [39mNone[39;00m: [1;32m 253[0m [39m# if no result, user decided to skip optimization[39;00m [1;32m 254[0m [39m# otherwise update running loss + reset accumulated loss[39;00m [1;32m 255[0m [39m# TODO: find proper way to handle updating running loss[39;00m File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:358[0m, in [0;36mOptimizerLoop._optimizer_step[0;34m(self, optimizer, opt_idx, batch_idx, train_step_and_backward_closure)[0m [1;32m 355[0m [39mself[39m[39m.[39moptim_progress[39m.[39moptimizer[39m.[39mstep[39m.[39mincrement_ready() [1;32m 357[0m [39m# model hook[39;00m [0;32m--> 358[0m [39mself[39;49m[39m.[39;49mtrainer[39m.[39;49m_call_lightning_module_hook( [1;32m 359[0m [39m"[39;49m[39moptimizer_step[39;49m[39m"[39;49m, [1;32m 360[0m [39mself[39;49m[39m.[39;49mtrainer[39m.[39;49mcurrent_epoch, [1;32m 361[0m batch_idx, [1;32m 362[0m optimizer, [1;32m 363[0m opt_idx, [1;32m 364[0m train_step_and_backward_closure, [1;32m 365[0m on_tpu[39m=[39;49m[39misinstance[39;49m([39mself[39;49m[39m.[39;49mtrainer[39m.[39;49maccelerator, TPUAccelerator), [1;32m 366[0m using_native_amp[39m=[39;49m([39mself[39;49m[39m.[39;49mtrainer[39m.[39;49mamp_backend [39m==[39;49m AMPType[39m.[39;49mNATIVE), [1;32m 367[0m using_lbfgs[39m=[39;49mis_lbfgs, [1;32m 368[0m ) [1;32m 370[0m [39mif[39;00m [39mnot[39;00m should_accumulate: [1;32m 371[0m [39mself[39m[39m.[39moptim_progress[39m.[39moptimizer[39m.[39mstep[39m.[39mincrement_completed() File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:1552[0m, in [0;36mTrainer._call_lightning_module_hook[0;34m(self, hook_name, pl_module, *args, **kwargs)[0m [1;32m 1549[0m pl_module[39m.[39m_current_fx_name [39m=[39m hook_name [1;32m 1551[0m [39mwith[39;00m [39mself[39m[39m.[39mprofiler[39m.[39mprofile([39mf[39m[39m"[39m[39m[LightningModule][39m[39m{[39;00mpl_module[39m.[39m[39m__class__[39m[39m.[39m[39m__name__[39m[39m}[39;00m[39m.[39m[39m{[39;00mhook_name[39m}[39;00m[39m"[39m): [0;32m-> 1552[0m output [39m=[39m fn([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 1554[0m [39m# restore current_fx when nested context[39;00m [1;32m 1555[0m pl_module[39m.[39m_current_fx_name [39m=[39m prev_fx_name File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/core/module.py:1666[0m, in [0;36mLightningModule.optimizer_step[0;34m(self, epoch, batch_idx, optimizer, optimizer_idx, optimizer_closure, on_tpu, using_native_amp, using_lbfgs)[0m [1;32m 1584[0m [39mdef[39;00m [39moptimizer_step[39m( [1;32m 1585[0m [39mself[39m, [1;32m 1586[0m epoch: [39mint[39m, [0;32m (...)[0m [1;32m 1593[0m using_lbfgs: [39mbool[39m [39m=[39m [39mFalse[39;00m, [1;32m 1594[0m ) [39m-[39m[39m>[39m [39mNone[39;00m: [1;32m 1595[0m [39mr[39m[39m"""[39;00m [1;32m 1596[0m [39m Override this method to adjust the default way the :class:`~pytorch_lightning.trainer.trainer.Trainer` calls[39;00m [1;32m 1597[0m [39m each optimizer.[39;00m [0;32m (...)[0m [1;32m 1664[0m [1;32m 1665[0m [39m """[39;00m [0;32m-> 1666[0m optimizer[39m.[39;49mstep(closure[39m=[39;49moptimizer_closure) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/core/optimizer.py:168[0m, in [0;36mLightningOptimizer.step[0;34m(self, closure, **kwargs)[0m [1;32m 165[0m [39mraise[39;00m MisconfigurationException([39m"[39m[39mWhen `optimizer.step(closure)` is called, the closure should be callable[39m[39m"[39m) [1;32m 167[0m [39massert[39;00m [39mself[39m[39m.[39m_strategy [39mis[39;00m [39mnot[39;00m [39mNone[39;00m [0;32m--> 168[0m step_output [39m=[39m [39mself[39;49m[39m.[39;49m_strategy[39m.[39;49moptimizer_step([39mself[39;49m[39m.[39;49m_optimizer, [39mself[39;49m[39m.[39;49m_optimizer_idx, closure, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 170[0m [39mself[39m[39m.[39m_on_after_step() [1;32m 172[0m [39mreturn[39;00m step_output File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/strategies/strategy.py:216[0m, in [0;36mStrategy.optimizer_step[0;34m(self, optimizer, opt_idx, closure, model, **kwargs)[0m [1;32m 206[0m [39m"""Performs the actual optimizer step.[39;00m [1;32m 207[0m [1;32m 208[0m [39mArgs:[39;00m [0;32m (...)[0m [1;32m 213[0m [39m **kwargs: Any extra arguments to ``optimizer.step``[39;00m [1;32m 214[0m [39m"""[39;00m [1;32m 215[0m model [39m=[39m model [39mor[39;00m [39mself[39m[39m.[39mlightning_module [0;32m--> 216[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49mprecision_plugin[39m.[39;49moptimizer_step(model, optimizer, opt_idx, closure, [39m*[39;49m[39m*[39;49mkwargs) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/plugins/precision/native_amp.py:80[0m, in [0;36mNativeMixedPrecisionPlugin.optimizer_step[0;34m(self, model, optimizer, optimizer_idx, closure, **kwargs)[0m [1;32m 70[0m [39mdef[39;00m [39moptimizer_step[39m( [1;32m 71[0m [39mself[39m, [1;32m 72[0m model: Optional[Union[[39m"[39m[39mpl.LightningModule[39m[39m"[39m, Module]], [0;32m (...)[0m [1;32m 76[0m [39m*[39m[39m*[39mkwargs: Any, [1;32m 77[0m ) [39m-[39m[39m>[39m Any: [1;32m 78[0m [39mif[39;00m [39mself[39m[39m.[39mscaler [39mis[39;00m [39mNone[39;00m: [1;32m 79[0m [39m# skip scaler logic, as bfloat16 does not require scaler[39;00m [0;32m---> 80[0m [39mreturn[39;00m [39msuper[39;49m()[39m.[39;49moptimizer_step(model, optimizer, optimizer_idx, closure, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 81[0m [39mif[39;00m [39misinstance[39m(optimizer, LBFGS): [1;32m 82[0m [39mraise[39;00m MisconfigurationException( [1;32m 83[0m [39mf[39m[39m"[39m[39mNative AMP and the LBFGS optimizer are not compatible (optimizer [39m[39m{[39;00moptimizer_idx[39m}[39;00m[39m).[39m[39m"[39m [1;32m 84[0m ) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/plugins/precision/precision_plugin.py:153[0m, in [0;36mPrecisionPlugin.optimizer_step[0;34m(self, model, optimizer, optimizer_idx, closure, **kwargs)[0m [1;32m 151[0m [39mif[39;00m [39misinstance[39m(model, pl[39m.[39mLightningModule): [1;32m 152[0m closure [39m=[39m partial([39mself[39m[39m.[39m_wrap_closure, model, optimizer, optimizer_idx, closure) [0;32m--> 153[0m [39mreturn[39;00m optimizer[39m.[39;49mstep(closure[39m=[39;49mclosure, [39m*[39;49m[39m*[39;49mkwargs) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/optim/optimizer.py:113[0m, in [0;36mOptimizer._hook_for_profile.<locals>.profile_hook_step.<locals>.wrapper[0;34m(*args, **kwargs)[0m [1;32m 111[0m profile_name [39m=[39m [39m"[39m[39mOptimizer.step#[39m[39m{}[39;00m[39m.step[39m[39m"[39m[39m.[39mformat(obj[39m.[39m[39m__class__[39m[39m.[39m[39m__name__[39m) [1;32m 112[0m [39mwith[39;00m torch[39m.[39mautograd[39m.[39mprofiler[39m.[39mrecord_function(profile_name): [0;32m--> 113[0m [39mreturn[39;00m func([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/autograd/grad_mode.py:27[0m, in [0;36m_DecoratorContextManager.__call__.<locals>.decorate_context[0;34m(*args, **kwargs)[0m [1;32m 24[0m [39m@functools[39m[39m.[39mwraps(func) [1;32m 25[0m [39mdef[39;00m [39mdecorate_context[39m([39m*[39margs, [39m*[39m[39m*[39mkwargs): [1;32m 26[0m [39mwith[39;00m [39mself[39m[39m.[39mclone(): [0;32m---> 27[0m [39mreturn[39;00m func([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/optim/adam.py:118[0m, in [0;36mAdam.step[0;34m(self, closure)[0m [1;32m 116[0m [39mif[39;00m closure [39mis[39;00m [39mnot[39;00m [39mNone[39;00m: [1;32m 117[0m [39mwith[39;00m torch[39m.[39menable_grad(): [0;32m--> 118[0m loss [39m=[39m closure() [1;32m 120[0m [39mfor[39;00m group [39min[39;00m [39mself[39m[39m.[39mparam_groups: [1;32m 121[0m params_with_grad [39m=[39m [] File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/plugins/precision/precision_plugin.py:138[0m, in [0;36mPrecisionPlugin._wrap_closure[0;34m(self, model, optimizer, optimizer_idx, closure)[0m [1;32m 125[0m [39mdef[39;00m [39m_wrap_closure[39m( [1;32m 126[0m [39mself[39m, [1;32m 127[0m model: [39m"[39m[39mpl.LightningModule[39m[39m"[39m, [0;32m (...)[0m [1;32m 130[0m closure: Callable[[], Any], [1;32m 131[0m ) [39m-[39m[39m>[39m Any: [1;32m 132[0m [39m"""This double-closure allows makes sure the ``closure`` is executed before the[39;00m [1;32m 133[0m [39m ``on_before_optimizer_step`` hook is called.[39;00m [1;32m 134[0m [1;32m 135[0m [39m The closure (generally) runs ``backward`` so this allows inspecting gradients in this hook. This structure is[39;00m [1;32m 136[0m [39m consistent with the ``PrecisionPlugin`` subclasses that cannot pass ``optimizer.step(closure)`` directly.[39;00m [1;32m 137[0m [39m """[39;00m [0;32m--> 138[0m closure_result [39m=[39m closure() [1;32m 139[0m [39mself[39m[39m.[39m_after_closure(model, optimizer, optimizer_idx) [1;32m 140[0m [39mreturn[39;00m closure_result File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:146[0m, in [0;36mClosure.__call__[0;34m(self, *args, **kwargs)[0m [1;32m 145[0m [39mdef[39;00m [39m__call__[39m([39mself[39m, [39m*[39margs: Any, [39m*[39m[39m*[39mkwargs: Any) [39m-[39m[39m>[39m Optional[Tensor]: [0;32m--> 146[0m [39mself[39m[39m.[39m_result [39m=[39m [39mself[39;49m[39m.[39;49mclosure([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 147[0m [39mreturn[39;00m [39mself[39m[39m.[39m_result[39m.[39mloss File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:132[0m, in [0;36mClosure.closure[0;34m(self, *args, **kwargs)[0m [1;32m 131[0m [39mdef[39;00m [39mclosure[39m([39mself[39m, [39m*[39margs: Any, [39m*[39m[39m*[39mkwargs: Any) [39m-[39m[39m>[39m ClosureResult: [0;32m--> 132[0m step_output [39m=[39m [39mself[39;49m[39m.[39;49m_step_fn() [1;32m 134[0m [39mif[39;00m step_output[39m.[39mclosure_loss [39mis[39;00m [39mNone[39;00m: [1;32m 135[0m [39mself[39m[39m.[39mwarning_cache[39m.[39mwarn([39m"[39m[39m`training_step` returned `None`. If this was on purpose, ignore this warning...[39m[39m"[39m) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/loops/optimization/optimizer_loop.py:407[0m, in [0;36mOptimizerLoop._training_step[0;34m(self, kwargs)[0m [1;32m 398[0m [39m"""Performs the actual train step with the tied hooks.[39;00m [1;32m 399[0m [1;32m 400[0m [39mArgs:[39;00m [0;32m (...)[0m [1;32m 404[0m [39m A ``ClosureResult`` containing the training step output.[39;00m [1;32m 405[0m [39m"""[39;00m [1;32m 406[0m [39m# manually capture logged metrics[39;00m [0;32m--> 407[0m training_step_output [39m=[39m [39mself[39;49m[39m.[39;49mtrainer[39m.[39;49m_call_strategy_hook([39m"[39;49m[39mtraining_step[39;49m[39m"[39;49m, [39m*[39;49mkwargs[39m.[39;49mvalues()) [1;32m 408[0m [39mself[39m[39m.[39mtrainer[39m.[39mstrategy[39m.[39mpost_training_step() [1;32m 410[0m model_output [39m=[39m [39mself[39m[39m.[39mtrainer[39m.[39m_call_lightning_module_hook([39m"[39m[39mtraining_step_end[39m[39m"[39m, training_step_output) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/trainer/trainer.py:1706[0m, in [0;36mTrainer._call_strategy_hook[0;34m(self, hook_name, *args, **kwargs)[0m [1;32m 1703[0m [39mreturn[39;00m [1;32m 1705[0m [39mwith[39;00m [39mself[39m[39m.[39mprofiler[39m.[39mprofile([39mf[39m[39m"[39m[39m[Strategy][39m[39m{[39;00m[39mself[39m[39m.[39mstrategy[39m.[39m[39m__class__[39m[39m.[39m[39m__name__[39m[39m}[39;00m[39m.[39m[39m{[39;00mhook_name[39m}[39;00m[39m"[39m): [0;32m-> 1706[0m output [39m=[39m fn([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) [1;32m 1708[0m [39m# restore current_fx when nested context[39;00m [1;32m 1709[0m pl_module[39m.[39m_current_fx_name [39m=[39m prev_fx_name File [0;32m~/.env/pytorch/lib/python3.10/site-packages/pytorch_lightning/strategies/strategy.py:358[0m, in [0;36mStrategy.training_step[0;34m(self, *args, **kwargs)[0m [1;32m 356[0m [39mwith[39;00m [39mself[39m[39m.[39mprecision_plugin[39m.[39mtrain_step_context(): [1;32m 357[0m [39massert[39;00m [39misinstance[39m([39mself[39m[39m.[39mmodel, TrainingStep) [0;32m--> 358[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49mmodel[39m.[39;49mtraining_step([39m*[39;49margs, [39m*[39;49m[39m*[39;49mkwargs) File [0;32m/mnt/scratch/kashif/pytorch-transformer-ts/perceiverar/lightning_module.py:87[0m, in [0;36mPerceiverARLightningModule.training_step[0;34m(self, batch, batch_idx)[0m [1;32m 83[0m [39mdef[39;00m [39mtraining_step[39m([39mself[39m, batch, batch_idx: [39mint[39m): [39m# type: ignore[39;00m [1;32m 84[0m [39m"""[39;00m [1;32m 85[0m [39m Execute training step.[39;00m [1;32m 86[0m [39m """[39;00m [0;32m---> 87[0m train_loss [39m=[39m [39mself[39;49m[39m.[39;49m_compute_loss(batch) [1;32m 88[0m [39mself[39m[39m.[39mlog( [1;32m 89[0m [39m"[39m[39mtrain_loss[39m[39m"[39m, [1;32m 90[0m train_loss, [0;32m (...)[0m [1;32m 93[0m prog_bar[39m=[39m[39mTrue[39;00m, [1;32m 94[0m ) [1;32m 95[0m [39mreturn[39;00m train_loss File [0;32m/mnt/scratch/kashif/pytorch-transformer-ts/perceiverar/lightning_module.py:64[0m, in [0;36mPerceiverARLightningModule._compute_loss[0;34m(self, batch)[0m [1;32m 53[0m future_observed_values [39m=[39m batch[[39m"[39m[39mfuture_observed_values[39m[39m"[39m] [1;32m 55[0m params, scale, _, _ [39m=[39m [39mself[39m[39m.[39mmodel[39m.[39mlagged_perciever( [1;32m 56[0m feat_static_cat, [1;32m 57[0m feat_static_real, [0;32m (...)[0m [1;32m 62[0m future_target, [1;32m 63[0m ) [0;32m---> 64[0m distr [39m=[39m [39mself[39;49m[39m.[39;49mmodel[39m.[39;49moutput_distribution(params, scale) [1;32m 66[0m [39m# context_target = past_target[:, -self.model.context_length + 1 :][39;00m [1;32m 67[0m [39m# target = torch.cat([39;00m [1;32m 68[0m [39m# (context_target, future_target),[39;00m [1;32m 69[0m [39m# dim=1,[39;00m [1;32m 70[0m [39m# )[39;00m [1;32m 71[0m loss_values [39m=[39m [39mself[39m[39m.[39mloss(distr, future_target) File [0;32m/mnt/scratch/kashif/pytorch-transformer-ts/perceiverar/module.py:457[0m, in [0;36mPerceiverARModel.output_distribution[0;34m(self, params, scale, trailing_n)[0m [1;32m 455[0m [39mif[39;00m trailing_n [39mis[39;00m [39mnot[39;00m [39mNone[39;00m: [1;32m 456[0m sliced_params [39m=[39m [p[:, [39m-[39mtrailing_n:] [39mfor[39;00m p [39min[39;00m params] [0;32m--> 457[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49mdistr_output[39m.[39;49mdistribution(sliced_params, scale[39m=[39;49mscale) File [0;32m~/gluon-ts-PR/src/gluonts/torch/distributions/distribution_output.py:138[0m, in [0;36mDistributionOutput.distribution[0;34m(self, distr_args, loc, scale)[0m [1;32m 117[0m [39mdef[39;00m [39mdistribution[39m( [1;32m 118[0m [39mself[39m, [1;32m 119[0m distr_args, [1;32m 120[0m loc: Optional[torch[39m.[39mTensor] [39m=[39m [39mNone[39;00m, [1;32m 121[0m scale: Optional[torch[39m.[39mTensor] [39m=[39m [39mNone[39;00m, [1;32m 122[0m ) [39m-[39m[39m>[39m Distribution: [1;32m 123[0m [39mr[39m[39m"""[39;00m [1;32m 124[0m [39m Construct the associated distribution, given the collection of[39;00m [1;32m 125[0m [39m constructor arguments and, optionally, a scale tensor.[39;00m [0;32m (...)[0m [1;32m 136[0m [39m batch_shape+event_shape of the resulting distribution.[39;00m [1;32m 137[0m [39m """[39;00m [0;32m--> 138[0m distr [39m=[39m [39mself[39;49m[39m.[39;49m_base_distribution(distr_args) [1;32m 139[0m [39mif[39;00m loc [39mis[39;00m [39mNone[39;00m [39mand[39;00m scale [39mis[39;00m [39mNone[39;00m: [1;32m 140[0m [39mreturn[39;00m distr File [0;32m~/gluon-ts-PR/src/gluonts/torch/distributions/distribution_output.py:115[0m, in [0;36mDistributionOutput._base_distribution[0;34m(self, distr_args)[0m [1;32m 114[0m [39mdef[39;00m [39m_base_distribution[39m([39mself[39m, distr_args): [0;32m--> 115[0m [39mreturn[39;00m [39mself[39;49m[39m.[39;49mdistr_cls([39m*[39;49mdistr_args) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/distributions/studentT.py:50[0m, in [0;36mStudentT.__init__[0;34m(self, df, loc, scale, validate_args)[0m [1;32m 48[0m [39mdef[39;00m [39m__init__[39m([39mself[39m, df, loc[39m=[39m[39m0.[39m, scale[39m=[39m[39m1.[39m, validate_args[39m=[39m[39mNone[39;00m): [1;32m 49[0m [39mself[39m[39m.[39mdf, [39mself[39m[39m.[39mloc, [39mself[39m[39m.[39mscale [39m=[39m broadcast_all(df, loc, scale) [0;32m---> 50[0m [39mself[39m[39m.[39m_chi2 [39m=[39m Chi2([39mself[39;49m[39m.[39;49mdf) [1;32m 51[0m batch_shape [39m=[39m [39mself[39m[39m.[39mdf[39m.[39msize() [1;32m 52[0m [39msuper[39m(StudentT, [39mself[39m)[39m.[39m[39m__init__[39m(batch_shape, validate_args[39m=[39mvalidate_args) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/distributions/chi2.py:22[0m, in [0;36mChi2.__init__[0;34m(self, df, validate_args)[0m [1;32m 21[0m [39mdef[39;00m [39m__init__[39m([39mself[39m, df, validate_args[39m=[39m[39mNone[39;00m): [0;32m---> 22[0m [39msuper[39;49m(Chi2, [39mself[39;49m)[39m.[39;49m[39m__init__[39;49m([39m0.5[39;49m [39m*[39;49m df, [39m0.5[39;49m, validate_args[39m=[39;49mvalidate_args) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/distributions/gamma.py:52[0m, in [0;36mGamma.__init__[0;34m(self, concentration, rate, validate_args)[0m [1;32m 50[0m [39melse[39;00m: [1;32m 51[0m batch_shape [39m=[39m [39mself[39m[39m.[39mconcentration[39m.[39msize() [0;32m---> 52[0m [39msuper[39;49m(Gamma, [39mself[39;49m)[39m.[39;49m[39m__init__[39;49m(batch_shape, validate_args[39m=[39;49mvalidate_args) File [0;32m~/.env/pytorch/lib/python3.10/site-packages/torch/distributions/distribution.py:55[0m, in [0;36mDistribution.__init__[0;34m(self, batch_shape, event_shape, validate_args)[0m [1;32m 53[0m valid [39m=[39m constraint[39m.[39mcheck(value) [1;32m 54[0m [39mif[39;00m [39mnot[39;00m valid[39m.[39mall(): [0;32m---> 55[0m [39mraise[39;00m [39mValueError[39;00m( [1;32m 56[0m [39mf[39m[39m"[39m[39mExpected parameter [39m[39m{[39;00mparam[39m}[39;00m[39m [39m[39m"[39m [1;32m 57[0m [39mf[39m[39m"[39m[39m([39m[39m{[39;00m[39mtype[39m(value)[39m.[39m[39m__name__[39m[39m}[39;00m[39m of shape [39m[39m{[39;00m[39mtuple[39m(value[39m.[39mshape)[39m}[39;00m[39m) [39m[39m"[39m [1;32m 58[0m [39mf[39m[39m"[39m[39mof distribution [39m[39m{[39;00m[39mrepr[39m([39mself[39m)[39m}[39;00m[39m [39m[39m"[39m [1;32m 59[0m [39mf[39m[39m"[39m[39mto satisfy the constraint [39m[39m{[39;00m[39mrepr[39m(constraint)[39m}[39;00m[39m, [39m[39m"[39m [1;32m 60[0m [39mf[39m[39m"[39m[39mbut found invalid values:[39m[39m\n[39;00m[39m{[39;00mvalue[39m}[39;00m[39m"[39m [1;32m 61[0m ) [1;32m 62[0m [39msuper[39m(Distribution, [39mself[39m)[39m.[39m[39m__init__[39m() [0;31mValueError[0m: Expected parameter df (Tensor of shape (128, 24)) of distribution Chi2() to satisfy the constraint GreaterThan(lower_bound=0.0), but found invalid values: tensor([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], device='cuda:0', grad_fn=<MulBackward0>)
In [19]:
forecast_it, ts_it = make_evaluation_predictions(
dataset=dataset.test,
predictor=predictor
)In [20]:
forecasts = list(forecast_it)In [10]:
tss = list(ts_it)In [21]:
evaluator = Evaluator()
agg_metrics, ts_metrics = evaluator(iter(tss), iter(forecasts), num_series=len(dataset.test))Running evaluation: 100%|██████████| 2247/2247 [00:00<00:00, 4768.58it/s] /home/kashif/.env/pytorch/lib/python3.10/site-packages/pandas/core/dtypes/cast.py:1181: UserWarning: Warning: converting a masked element to nan. return arr.astype(dtype, copy=True)
In [22]:
agg_metricsOut [22]:
{'MSE': 2632277.5637280988,
'abs_error': 8510987.796981812,
'abs_target_sum': 128632956.0,
'abs_target_mean': 2385.272140631954,
'seasonal_error': 189.49338196116761,
'MASE': 0.6778296899315452,
'MAPE': 0.08927172247730361,
'sMAPE': 0.09760858887603995,
'MSIS': 5.672968862545339,
'QuantileLoss[0.1]': 3457375.6345648617,
'Coverage[0.1]': 0.08778371161548731,
'QuantileLoss[0.2]': 5534597.8590742415,
'Coverage[0.2]': 0.17855288532858626,
'QuantileLoss[0.3]': 6996813.588530006,
'Coverage[0.3]': 0.2765353805073431,
'QuantileLoss[0.4]': 7983532.04939911,
'Coverage[0.4]': 0.3759827918706424,
'QuantileLoss[0.5]': 8510987.873387918,
'Coverage[0.5]': 0.48075211392968403,
'QuantileLoss[0.6]': 8669924.372969786,
'Coverage[0.6]': 0.5748405281115562,
'QuantileLoss[0.7]': 8253363.577501401,
'Coverage[0.7]': 0.6788310339712208,
'QuantileLoss[0.8]': 7247401.984374037,
'Coverage[0.8]': 0.7797804480047471,
'QuantileLoss[0.9]': 5274768.110512937,
'Coverage[0.9]': 0.8810265539237501,
'RMSE': 1622.4295250420275,
'NRMSE': 0.6801863390783499,
'ND': 0.06616490875776665,
'wQuantileLoss[0.1]': 0.02687783708060679,
'wQuantileLoss[0.2]': 0.04302628215334056,
'wQuantileLoss[0.3]': 0.05439363135315032,
'wQuantileLoss[0.4]': 0.06206443743234129,
'wQuantileLoss[0.5]': 0.06616490935175211,
'wQuantileLoss[0.6]': 0.06740049084287378,
'wQuantileLoss[0.7]': 0.06416212325480106,
'wQuantileLoss[0.8]': 0.056341719958406596,
'wQuantileLoss[0.9]': 0.04100635074041941,
'mean_absolute_QuantileLoss': 6880973.894479367,
'mean_wQuantileLoss': 0.053493086907521324,
'MAE_Coverage': 0.02065717252633142,
'OWA': nan}In [23]:
ts_metrics.plot(x='MSIS', y='MASE', kind='scatter')
plt.grid(which="both")
plt.show()In [24]:
plt.figure(figsize=(20, 15))
date_formater = mdates.DateFormatter('%b, %d')
plt.rcParams.update({'font.size': 15})
for idx, (forecast, ts) in islice(enumerate(zip(forecasts, tss)), 9):
ax = plt.subplot(3, 3, idx+1)
plt.plot(ts[-4 * dataset.metadata.prediction_length:].to_timestamp(), label="target", )
forecast.plot( color='g')
plt.xticks(rotation=60)
ax.xaxis.set_major_formatter(date_formater)
plt.gcf().tight_layout()
plt.legend()
plt.show()In [ ]: