def test_distribution(): """ Makes sure additional tensors can be accessed and have expected shapes """ prediction_length = ds_info.prediction_length estimator = DeepAREstimator( freq=freq, prediction_length=prediction_length, trainer=Trainer(epochs=2, num_batches_per_epoch=1), distr_output=StudentTOutput(), ) train_output = estimator.train_model(train_ds, test_ds) # todo adapt loader to anomaly detection use-case batch_size = 2 num_samples = 3 training_data_loader = TrainDataLoader( dataset=train_ds, transform=train_output.transformation, batch_size=batch_size, num_batches_per_epoch=estimator.trainer.num_batches_per_epoch, ctx=mx.cpu(), ) seq_len = 2 * ds_info.prediction_length for data_entry in islice(training_data_loader, 1): input_names = get_hybrid_forward_input_names(train_output.trained_net) distr = train_output.trained_net.distribution( *[data_entry[k] for k in input_names] ) assert distr.sample(num_samples).shape == ( num_samples, batch_size, seq_len, )
def test_shape(): """ Makes sure additional tensors can be accessed and have expected shapes """ prediction_length = ds_info.prediction_length estimator = DeepAREstimator( freq=freq, prediction_length=prediction_length, trainer=Trainer(epochs=1, num_batches_per_epoch=1), distr_output=StudentTOutput(), ) training_transformation, trained_net = estimator.train_model(train_ds) # todo adapt loader to anomaly detection use-case batch_size = 2 training_data_loader = TrainDataLoader( dataset=train_ds, transform=training_transformation, batch_size=batch_size, num_batches_per_epoch=estimator.trainer.num_batches_per_epoch, ctx=mx.cpu(), ) seq_len = 2 * ds_info.prediction_length for data_entry in islice(training_data_loader, 1): input_names = get_hybrid_forward_input_names(trained_net) loss, likelihoods, *distr_args = trained_net( *[data_entry[k] for k in input_names]) distr = StudentT(*distr_args) assert likelihoods.shape == (batch_size, seq_len) assert distr.mu.shape == (batch_size, seq_len) assert distr.sigma.shape == (batch_size, seq_len) assert distr.nu.shape == (batch_size, seq_len)
from gluonts.dataset.repository.datasets import get_dataset if __name__ == '__main__': dataset = get_dataset(dataset_name="electricity") estimator = DeepAREstimator( prediction_length=dataset.metadata.prediction_length, freq=dataset.metadata.time_granularity, trainer=Trainer(learning_rate=1e-3, epochs=50, num_batches_per_epoch=100), ) # instead of calling `train` method, we call `train_model` that returns more things including the training model train_output = estimator.train_model(dataset.train) # we construct a data_entry that contains 500 random windows batch_size = 500 num_samples = 100 training_data_loader = TrainDataLoader( dataset=dataset.train, transform=train_output.transformation, batch_size=batch_size, num_batches_per_epoch=estimator.trainer.num_batches_per_epoch, ctx=mx.cpu(), ) for data_entry in islice(training_data_loader, 1): pass