zalandoresearch / pytorch-ts

PyTorch based Probabilistic Time Series forecasting framework based on GluonTS backend
MIT License
1.21k stars 191 forks source link

unroll_encoder_default doesn't match the dimension!!! #133

Open STARK1117 opened 1 year ago

STARK1117 commented 1 year ago

I am currently testing on `import pandas as pd import numpy as np

from gluonts.dataset.common import ListDataset from gluonts.mx.model.deepar import DeepAREstimator from gluonts.mx.trainer import Trainer

from gluonts.mx.distribution.multivariate_gaussian import MultivariateGaussianOutput

from gluonts.evaluation.backtest import make_evaluation_predictions

N = 20 # number of time series T = 1000 # number of timesteps dim = 2 # dimension of the observations prediction_length = 25 freq = '1H'

custom_datasetx = np.random.normal(size=(N, dim, T)) custom_datasetx[:, 1, :] = 5 * custom_datasetx[:, 1, :] start = pd.Timestamp("01-01-2019", freq=freq)

train_ds = ListDataset( [ {'target': x, 'start': start} for x in custom_datasetx[:, :, :-prediction_length] ], freq=freq, one_dim_target=False, )

test_ds = ListDataset( [ {'target': x, 'start': start} for x in custom_datasetx[:, :, :] ], freq=freq, one_dim_target=False, )

epochs = 10 learning_rate = 1E-3 batch_size = 3 num_batches_per_epoch = 100

estimator = DeepAREstimator( prediction_length=prediction_length, context_length=prediction_length, freq=freq, trainer=Trainer( ctx="cpu", epochs=epochs, learning_rate=learning_rate, hybridize=False, num_batches_per_epoch=num_batches_per_epoch, ), batch_size=batch_size, distr_output=MultivariateGaussianOutput(dim=dim) )

predictor = estimator.train(train_ds)

forecast_it, ts_it = make_evaluation_predictions( dataset=test_ds, # test dataset predictor=predictor, # predictor num_eval_samples=100, # number of sample paths we want for evaluation )

forecasts = list(forecast_it) tss = list(ts_it)`

Where I had the following error

0%| | 0/100 [00:00<?, ?it/s] Traceback (most recent call last): File "C:\XXXX\Tutorial\MyTest2.py", line 66, in predictor = estimator.train(train_ds) File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\model\estimator.py", line 237, in train return self.train_model( File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\model\estimator.py", line 214, in train_model self.trainer( File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\trainer_base.py", line 420, in call epoch_loss = loop( File "C:\Users\NPU.conda\envs\GPUgluon\lib\site-packages\gluonts\mx\trainer_base.py", line 286, in loop = net(batch.values()) File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\mxnet\gluon\block.py", line 682, in call out = self.forward(args) File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\mxnet\gluon\block.py", line 1254, in forward return self.hybrid_forward(ndarray, x, *args, *params) File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\model\deepar_network.py", line 915, in hybrid_forward outputs = self.distribution( File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\model\deepar_network.py", line 854, in distribution rnnoutputs, , scale, , = self.unroll_encoder( File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\gluonts\mx\model\deepar_network.py", line 691, in unroll_encoder_default is_padded_indicator = F.concat( File "", line 70, in concat File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\mxnet_ctypes\ndarray.py", line 82, in _imperative_invoke check_call(_LIB.MXImperativeInvokeEx( File "C:\Users\NPU.conda\envs\GPU_gluon\lib\site-packages\mxnet\base.py", line 246, in check_call raise get_last_ffi_error() mxnet.base.MXNetError: Traceback (most recent call last): File "C:\Jenkins\workspace\mxnet-tag\mxnet\src\operator\nn\concat.cc", line 67 MXNetError: Check failed: shape_assign(&(in_shape)[i], dshape): Incompatible input shape: expected [3,-1], got [3,25,2]

it turns out to be the problem of here: Line 691 is_padded_indicator = F.concat( past_is_pad.slice_axis( axis=1, begin=self.history_length - self.context_length, end=None, ), F.zeros_like(future_observed_values), dim=1, ) the dimension of past_is_pad.slice_axis( axis=1, begin=self.history_length - self.context_length, end=None, ) and F.zeros_like(future_observed_values) don't match

so I printed out their shape as print(past_is_pad.slice_axis( axis=1, begin=self.history_length - self.context_length, end=None, ).shape) print(F.zeros_like(future_observed_values).shape) and get (3, 25) (3, 25, 2)

please help, great Thanks!!!!!!