Как обучить deepAR на нескольких временных рядах?
Я пытаюсь использовать реализацию deepAR GluonTS для обучения deepAR на нескольких временных рядах (с использованием набора данных m5). Однако, когда я обучаю deepAR на одном временном ряду в наборе данных, обучение занимает так же мало времени, как и на обучение модели на 100(или более) временных рядах. Я часами пытаюсь понять, что может пойти не так, но не нашел никакого потенциального решения. Вот код, воспроизводящий проблему, при условии, что у вас загружен набор данных m5:
from gluonts.mx import Trainer
from gluonts.evaluation import make_evaluation_predictions
from gluonts.model import deepar
from gluonts.mx.distribution.neg_binomial import NegativeBinomialOutput
import numpy as np
import pandas as pd
########################
##### PREPARING THE DATA
########################
prediction_length = 28
freq = "D"
start = pd.Timestamp("29-01-2011")
# load data
ste = pd.read_csv("sales_train_evaluation.csv")
# pandas Series of item 2
eva = ste.iloc[1,6:]
# 1-dimensional array containing time series data of item 2
item = np.array(ste.iloc[1,6:])
# Convert item to GluonTS-compatible ListDataset object
train_1 = ListDataset(
[{'target': item[:-prediction_length], 'start':start}],
freq=freq
)
# 2-dimensional array, containing time series data of 100 items
items = np.array(ste.iloc[1:101,6:])
# Convert to GluonTS-compatible ListDataset object
# train_100 contains 100 dictionaries, each corresponding to a given time series
train_100 = ListDataset(
[{'target': ts, 'start':start} for ts in items[:, :-prediction_length]],
freq=freq
)
########################
##### TRAINING THE MODEL
########################
nbo = NegativeBinomialOutput()
trainer = Trainer(epochs=5)
# train deepAR on 1 time series
estimator1 = deepar.DeepAREstimator(
freq="D", prediction_length=28, trainer=trainer, distr_output=nbo
)
estimator1.train(training_data=train_1)
# train deepAR on 100 time series
estimator100 = deepar.DeepAREstimator(
freq="D", prediction_length=28, trainer=trainer, distr_output=nbo
)
estimator100.train(training_data=train_100)
1 ответ
Да, для 100 временных рядов потребуется время, вы используете графический процессор или процессор? В моем случае я использую графический процессор, поэтому он отлично работает для меня
estimator = SimpleFeedForwardEstimator(
num_hidden_dimensions=[10],
prediction_length=custom_ds_metadata['prediction_length'],
context_length=2*custom_ds_metadata['prediction_length'],
freq=custom_ds_metadata['freq'],
trainer=Trainer(
ctx="gpu",
epochs=5,
learning_rate=1e-3,
hybridize=False,
num_batches_per_epoch=100
)
)`enter code here`