def dsinfo(request): from gluonts import time_feature from gluonts.dataset.artificial import constant_dataset, default_synthetic if request.param == "constant": ds_info, train_ds, test_ds = constant_dataset() return AttrDict( name="constant", cardinality=int(ds_info.metadata.feat_static_cat[0].cardinality), freq=ds_info.metadata.freq, num_parallel_samples=2, prediction_length=ds_info.prediction_length, # FIXME: Should time features should not be needed for GP time_features=[time_feature.DayOfWeek(), time_feature.HourOfDay()], train_ds=train_ds, test_ds=test_ds, ) elif request.param == "synthetic": ds_info, train_ds, test_ds = default_synthetic() return AttrDict( name="synthetic", batch_size=32, cardinality=int(ds_info.metadata.feat_static_cat[0].cardinality), context_length=2, freq=ds_info.metadata.freq, prediction_length=ds_info.prediction_length, num_parallel_samples=2, train_ds=train_ds, test_ds=test_ds, time_features=None, )
def test_simple_model(): dsinfo, training_data, test_data = default_synthetic() freq = dsinfo.metadata.freq prediction_length = dsinfo.prediction_length context_length = 2 * prediction_length hidden_dimensions = [10, 10] net = LightningFeedForwardNetwork( freq=freq, prediction_length=prediction_length, context_length=context_length, hidden_dimensions=hidden_dimensions, distr_output=NormalOutput(), batch_norm=True, scaling=mean_abs_scaling, ) transformation = Chain([ AddObservedValuesIndicator( target_field=FieldName.TARGET, output_field=FieldName.OBSERVED_VALUES, ), InstanceSplitter( target_field=FieldName.TARGET, is_pad_field=FieldName.IS_PAD, start_field=FieldName.START, forecast_start_field=FieldName.FORECAST_START, train_sampler=ExpectedNumInstanceSampler(num_instances=1), past_length=context_length, future_length=prediction_length, time_series_fields=[FieldName.OBSERVED_VALUES], ), ]) data_loader = TrainDataLoader( training_data, batch_size=8, stack_fn=batchify, transform=transformation, num_batches_per_epoch=5, ) trainer = pl.Trainer(max_epochs=3, callbacks=[], weights_summary=None) trainer.fit(net, train_dataloader=data_loader) predictor = net.get_predictor(transformation) forecast_it, ts_it = make_evaluation_predictions( dataset=test_data, predictor=predictor, num_samples=100, ) evaluator = Evaluator(quantiles=[0.5, 0.9], num_workers=None) agg_metrics, _ = evaluator(ts_it, forecast_it)
def create_multivariate_datasets(data_dir: str) -> None: info, train_ds, test_ds = default_synthetic() save_datasets(TrainDatasets(metadata=info.metadata, train=train_ds, test=test_ds), data_dir) return
# permissions and limitations under the License. # Third-party imports import pytest # First-party imports from gluonts.dataset.artificial import default_synthetic from gluonts.evaluation.backtest import backtest_metrics from gluonts.model.deepar import DeepAREstimator from gluonts.model.deep_factor import DeepFactorEstimator from gluonts.model.simple_feedforward import SimpleFeedForwardEstimator from gluonts.model.gp_forecaster import GaussianProcessEstimator from gluonts.model.wavenet import WaveNetEstimator from gluonts.model.transformer import TransformerEstimator dataset_info, train_ds, test_ds = default_synthetic() freq = dataset_info.metadata.freq prediction_length = dataset_info.prediction_length cardinality = int(dataset_info.metadata.feat_static_cat[0].cardinality) batch_size = 32 context_length = 2 epochs = 1 def simple_feedforward_estimator(hybridize: bool = True, batches_per_epoch=1): return ( SimpleFeedForwardEstimator, dict( ctx="cpu", epochs=epochs, learning_rate=1e-2,