【问题标题】:How to train deepAR on multiple time series?如何在多个时间序列上训练 deepAR?
【发布时间】:2021-12-09 19:00:26
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: time-series forecasting mxnet-gluon deepar


    【解决方案1】:

    是的,对于 100 个时间序列,这需要时间,您使用的是 gpu 还是 cpu? 我使用的是 GPU,所以它对我来说很好

    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`
    

    【讨论】:

    • 我正在使用带有 GPU 的台式电脑,我不知道这是否意味着我在脚本中使用了我的 GPU。澄清一下,问题是在 1 个时间序列上的训练时间与在 100 个时间序列上的训练时间相同,这似乎是错误的。这可能是因为我使用的是 GPU 吗?
    • 是的,当您增加 100 个时间序列时,复杂性会增加。通过以下方式检查您的 mxnet 是否使用 gpu: import mxnet as mx print(f'mxnet version: {mx.__version__}') print(f'Number of GPUs: {mx.context.num_gpus()}') for me it打印出来:mxnet 版本:1.9.0 GPU 数量:8
    • 我得到 GPU 数量:0
    • 我认为你需要卸载旧版本并安装GPU版本。然后尝试使用它。这可能有用:github.com/awslabs/gluon-ts/discussions/640
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多