mirror of
https://github.com/wassname/pytorch-transformer-ts.git
synced 2026-08-08 11:25:07 +08:00
392 KiB
392 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 [13]:
estimator = PerceiverAREstimator(
depth=2,
heads=1,
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=25, accelerator='cpu'),
)In [14]:
predictor = estimator.train(
training_data=dataset.train,
num_workers=8,
shuffle_buffer_length=1024
)/opt/homebrew/lib/python3.9/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( GPU available: True (mps), used: False TPU available: False, using: 0 TPU cores IPU available: False, using: 0 IPUs HPU available: False, using: 0 HPUs /opt/homebrew/lib/python3.9/site-packages/pytorch_lightning/trainer/trainer.py:1788: UserWarning: MPS available but not used. Set `accelerator` and `devices` using `Trainer(accelerator='mps', devices=1)`. rank_zero_warn( /opt/homebrew/lib/python3.9/site-packages/pytorch_lightning/trainer/configuration_validator.py:117: PossibleUserWarning: You defined a `validation_step` but have no `val_dataloader`. Skipping val loop. rank_zero_warn( | Name | Type | Params ------------------------------------------- 0 | model | PerceiverARModel | 36.1 K ------------------------------------------- 36.1 K Trainable params 0 Non-trainable params 36.1 K Total params 0.144 Total estimated model params size (MB)
Training: 0it [00:00, ?it/s]
Epoch 0, global step 100: 'train_loss' reached 6.42776 (best 6.42776), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=0-step=100.ckpt' as top 1 Epoch 1, global step 200: 'train_loss' reached 5.74860 (best 5.74860), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=1-step=200.ckpt' as top 1 Epoch 2, global step 300: 'train_loss' reached 5.53532 (best 5.53532), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=2-step=300.ckpt' as top 1 Epoch 3, global step 400: 'train_loss' was not in top 1 Epoch 4, global step 500: 'train_loss' reached 5.51218 (best 5.51218), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=4-step=500.ckpt' as top 1 Epoch 5, global step 600: 'train_loss' reached 5.48945 (best 5.48945), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=5-step=600.ckpt' as top 1 Epoch 6, global step 700: 'train_loss' reached 5.46006 (best 5.46006), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=6-step=700.ckpt' as top 1 Epoch 7, global step 800: 'train_loss' was not in top 1 Epoch 8, global step 900: 'train_loss' reached 5.45789 (best 5.45789), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=8-step=900.ckpt' as top 1 Epoch 9, global step 1000: 'train_loss' reached 5.43128 (best 5.43128), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=9-step=1000.ckpt' as top 1 Epoch 10, global step 1100: 'train_loss' reached 5.42391 (best 5.42391), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=10-step=1100.ckpt' as top 1 Epoch 11, global step 1200: 'train_loss' reached 5.37426 (best 5.37426), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=11-step=1200.ckpt' as top 1 Epoch 12, global step 1300: 'train_loss' was not in top 1 Epoch 13, global step 1400: 'train_loss' reached 5.34587 (best 5.34587), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=13-step=1400.ckpt' as top 1 Epoch 14, global step 1500: 'train_loss' reached 5.34270 (best 5.34270), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=14-step=1500.ckpt' as top 1 Epoch 15, global step 1600: 'train_loss' was not in top 1 Epoch 16, global step 1700: 'train_loss' reached 5.33624 (best 5.33624), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=16-step=1700.ckpt' as top 1 Epoch 17, global step 1800: 'train_loss' reached 5.32782 (best 5.32782), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=17-step=1800.ckpt' as top 1 Epoch 18, global step 1900: 'train_loss' was not in top 1 Epoch 19, global step 2000: 'train_loss' reached 5.28012 (best 5.28012), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=19-step=2000.ckpt' as top 1 Epoch 20, global step 2100: 'train_loss' was not in top 1 Epoch 21, global step 2200: 'train_loss' was not in top 1 Epoch 22, global step 2300: 'train_loss' was not in top 1 Epoch 23, global step 2400: 'train_loss' was not in top 1 Epoch 24, global step 2500: 'train_loss' reached 5.27051 (best 5.27051), saving model to '/Users/kashif/Documents/GitHub/pytorch-transformer-ts/perceiverar/lightning_logs/version_22/checkpoints/epoch=24-step=2500.ckpt' as top 1 `Trainer.fit` stopped: `max_epochs=25` reached.
In [15]:
forecast_it, ts_it = make_evaluation_predictions(
dataset=dataset.test,
predictor=predictor
)In [16]:
forecasts = list(forecast_it)In [8]:
tss = list(ts_it)In [17]:
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, 25805.41it/s] /Users/kashif/Github/gluon-ts/src/gluonts/evaluation/_base.py:361: RuntimeWarning: divide by zero encountered in float_scalars metrics["ND"] = cast(float, metrics["abs_error"]) / cast( /opt/homebrew/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:1181: UserWarning: Warning: converting a masked element to nan. return arr.astype(dtype, copy=True)
In [18]:
agg_metricsOut [18]:
{'MSE': 54659388.626912884,
'abs_error': 45449271.4559927,
'abs_target_sum': 128632956.0,
'abs_target_mean': 2385.272140631954,
'seasonal_error': 189.49338196116761,
'MASE': 3.402492133476373,
'MAPE': 0.5195859642334041,
'sMAPE': 0.344615968371725,
'MSIS': 85.79713867275944,
'QuantileLoss[0.1]': 59259097.99589533,
'Coverage[0.1]': 0.49907283785788464,
'QuantileLoss[0.2]': 57816227.81258023,
'Coverage[0.2]': 0.5358070019284973,
'QuantileLoss[0.3]': 54536714.14192347,
'Coverage[0.3]': 0.5650126094051329,
'QuantileLoss[0.4]': 50351281.862691015,
'Coverage[0.4]': 0.5897307521139297,
'QuantileLoss[0.5]': 45449271.678276934,
'Coverage[0.5]': 0.6161363299213767,
'QuantileLoss[0.6]': 39958118.98481089,
'Coverage[0.6]': 0.6402425456163774,
'QuantileLoss[0.7]': 33818848.94476284,
'Coverage[0.7]': 0.6704124017208128,
'QuantileLoss[0.8]': 26983896.70083867,
'Coverage[0.8]': 0.7084260495475448,
'QuantileLoss[0.9]': 18850785.382875618,
'Coverage[0.9]': 0.7596981160065271,
'RMSE': 7393.198808831863,
'NRMSE': 3.099520043391405,
'ND': 0.3533252509255303,
'wQuantileLoss[0.1]': 0.4606836369048017,
'wQuantileLoss[0.2]': 0.44946668109360893,
'wQuantileLoss[0.3]': 0.4239715531525488,
'wQuantileLoss[0.4]': 0.3914337618323178,
'wQuantileLoss[0.5]': 0.3533252526535807,
'wQuantileLoss[0.6]': 0.3106367157170118,
'wQuantileLoss[0.7]': 0.26290967724292086,
'wQuantileLoss[0.8]': 0.20977436529437035,
'wQuantileLoss[0.9]': 0.14654709002314786,
'mean_absolute_QuantileLoss': 43002693.722739436,
'mean_wQuantileLoss': 0.33430541487936766,
'MAE_Coverage': 0.17860727884092376,
'OWA': nan}In [19]:
ts_metrics.plot(x='MSIS', y='MASE', kind='scatter')
plt.grid(which="both")
plt.show()In [20]:
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 [ ]: