From ba0e370dc1713b0ddd9b1be0ac31ef1fdc7bdf76 Mon Sep 17 00:00:00 2001 From: Kashif Rasul Date: Fri, 24 Feb 2023 12:36:54 +0100 Subject: [PATCH] [time series] updated expected values for integration test. (#21762) * updated expected * prediction_length fix * prediction_length default value * default prediction_length 24 * revert back prediction_length default * move prediction_length test --- .../configuration_time_series_transformer.py | 11 ++++++----- .../modeling_time_series_transformer.py | 4 ++++ .../test_modeling_time_series_transformer.py | 6 +++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/transformers/models/time_series_transformer/configuration_time_series_transformer.py b/src/transformers/models/time_series_transformer/configuration_time_series_transformer.py index 5b631f21d8..b8b21045b5 100644 --- a/src/transformers/models/time_series_transformer/configuration_time_series_transformer.py +++ b/src/transformers/models/time_series_transformer/configuration_time_series_transformer.py @@ -44,7 +44,8 @@ class TimeSeriesTransformerConfig(PretrainedConfig): Args: prediction_length (`int`): - The prediction length for the decoder. In other words, the prediction horizon of the model. + The prediction length for the decoder. In other words, the prediction horizon of the model. This value is + typically dictated by the dataset and we recommend to set it appropriately. context_length (`int`, *optional*, defaults to `prediction_length`): The context length for the encoder. If `None`, the context length will be the same as the `prediction_length`. @@ -60,8 +61,8 @@ class TimeSeriesTransformerConfig(PretrainedConfig): Whether to scale the input targets via "mean" scaler, "std" scaler or no scaler if `None`. If `True`, the scaler is set to "mean". lags_sequence (`list[int]`, *optional*, defaults to `[1, 2, 3, 4, 5, 6, 7]`): - The lags of the input time series as covariates often dictated by the frequency. Default is `[1, 2, 3, 4, - 5, 6, 7]`. + The lags of the input time series as covariates often dictated by the frequency of the data. Default is + `[1, 2, 3, 4, 5, 6, 7]` but we recommend to change it based on the dataset appropriately. num_time_features (`int`, *optional*, defaults to 0): The number of time features in the input time series. num_dynamic_real_features (`int`, *optional*, defaults to 0): @@ -117,8 +118,8 @@ class TimeSeriesTransformerConfig(PretrainedConfig): ```python >>> from transformers import TimeSeriesTransformerConfig, TimeSeriesTransformerModel - >>> # Initializing a default Time Series Transformer configuration - >>> configuration = TimeSeriesTransformerConfig() + >>> # Initializing a Time Series Transformer configuration with 12 time steps for prediction + >>> configuration = TimeSeriesTransformerConfig(prediction_length=12) >>> # Randomly initializing a model (with random weights) from the configuration >>> model = TimeSeriesTransformerModel(configuration) diff --git a/src/transformers/models/time_series_transformer/modeling_time_series_transformer.py b/src/transformers/models/time_series_transformer/modeling_time_series_transformer.py index de0d295828..1e980563de 100644 --- a/src/transformers/models/time_series_transformer/modeling_time_series_transformer.py +++ b/src/transformers/models/time_series_transformer/modeling_time_series_transformer.py @@ -1176,6 +1176,8 @@ class TimeSeriesTransformerEncoder(TimeSeriesTransformerPreTrainedModel): self.dropout = config.dropout self.layerdrop = config.encoder_layerdrop + if config.prediction_length is None: + raise ValueError("The `prediction_length` config needs to be specified.") self.value_embedding = ValueEmbedding(feature_size=config.feature_size, d_model=config.d_model) self.embed_positions = TimeSeriesSinusoidalPositionalEmbedding( @@ -1311,6 +1313,8 @@ class TimeSeriesTransformerDecoder(TimeSeriesTransformerPreTrainedModel): super().__init__(config) self.dropout = config.dropout self.layerdrop = config.decoder_layerdrop + if config.prediction_length is None: + raise ValueError("The `prediction_length` config needs to be specified.") self.value_embedding = ValueEmbedding(feature_size=config.feature_size, d_model=config.d_model) self.embed_positions = TimeSeriesSinusoidalPositionalEmbedding( diff --git a/tests/models/time_series_transformer/test_modeling_time_series_transformer.py b/tests/models/time_series_transformer/test_modeling_time_series_transformer.py index 9402884891..6063a3469e 100644 --- a/tests/models/time_series_transformer/test_modeling_time_series_transformer.py +++ b/tests/models/time_series_transformer/test_modeling_time_series_transformer.py @@ -401,7 +401,7 @@ class TimeSeriesTransformerModelIntegrationTests(unittest.TestCase): self.assertEqual(output.shape, expected_shape) expected_slice = torch.tensor( - [[-0.6322, -1.5771, -0.9340], [-0.1011, -1.0263, -0.7208], [0.4979, -0.6487, -0.7189]], device=torch_device + [[0.8196, -1.5131, 1.4620], [1.1268, -1.3238, 1.5997], [1.5098, -1.0715, 1.7359]], device=torch_device ) self.assertTrue(torch.allclose(output[0, :3, :3], expected_slice, atol=TOLERANCE)) @@ -423,7 +423,7 @@ class TimeSeriesTransformerModelIntegrationTests(unittest.TestCase): self.assertEqual(output.shape, expected_shape) expected_slice = torch.tensor( - [[0.8177, -1.7989, -0.3127], [1.6964, -1.0607, -0.1749], [1.8395, 0.1110, 0.0263]], device=torch_device + [[-1.2957, -1.0280, -0.6045], [-0.7017, -0.8193, -0.3717], [-1.0449, -0.8149, 0.1405]], device=torch_device ) self.assertTrue(torch.allclose(output[0, :3, :3], expected_slice, atol=TOLERANCE)) @@ -444,6 +444,6 @@ class TimeSeriesTransformerModelIntegrationTests(unittest.TestCase): expected_shape = torch.Size((64, model.config.num_parallel_samples, model.config.prediction_length)) self.assertEqual(outputs.sequences.shape, expected_shape) - expected_slice = torch.tensor([3883.5037, 4630.2251, 7562.1338], device=torch_device) + expected_slice = torch.tensor([2825.2749, 3584.9207, 6763.9951], device=torch_device) mean_prediction = outputs.sequences.mean(dim=1) self.assertTrue(torch.allclose(mean_prediction[0, -3:], expected_slice, rtol=1e-1))