【问题标题】:PyTorch Temporal Fusion Transformer prediction output lengthPyTorch Temporal Fusion Transformer 预测输出长度
【发布时间】:2022-10-17 14:16:52
【问题描述】:

我已经在一些训练数据上训练了一个时间融合变换器,并想对一些看不见的数据进行预测。为此,我使用了 pytorch_forecasting TimeSeriesDataSet 数据结构

testing = TimeSeriesDataSet.from_dataset(training, df[lambda x: x.year > validation_cutoff], predict=True, stop_randomization=True)

df[lambda x: x.year > validation_cutoff].shape
(97036, 13)

鉴于

testing.data['reals'].shape
torch.Size([97036, 9])

我希望收到一个包含 97036 行的预测输出向量。所以我继续像这样生成我的预测

test_dataloader = testing.to_dataloader(train=False, batch_size=128 * 10, num_workers=0)
raw_predictions, x = best_tft.predict(testing, mode="raw", return_x=True)

但是,我收到大小的输出

raw_predictions['prediction'].shape
torch.Size([25476, 1, 7])

为什么要删除其中一些 97036 观察结果?

否则,我如何才能找出是否删除了这些 97036 观察结果以及为什么要删除这些观察结果?

【问题讨论】:

    标签: python transformer-model pytorch-dataloader pytorch-forecasting


    【解决方案1】:

    摆脱mode="raw" 以获得max_prediction 水平范围内的预测。它将为max_predictionhorizo​​n 的每一行组和列提供一个预测。

    torch.Size([25476, 1, 7])
    

    根据测试集的日期范围,这会在测试集上一次为每个粒度组提供一个预测。

    【讨论】:

      【解决方案2】:

      TimeSeriesDataSet 的源代码中有过滤器可以删除短时间序列。当您在TimeSeriesDataSet.to_dataloader 中设置predict=True 时,它会将min_prediction_length 设置为max_prediction_length。然后,当要创建实际的测试数据加载器时,所有比min_prediction_length 短的时间序列都将被删除,这会从测试集中删除整个数据,从而使您得到正好 0 个观察值。究竟为什么要以这种方式实现,我不知道。要进行预测,只需设置:

      testing = TimeSeriesDataSet.from_dataset(training, df[lambda x: x.year > validation_cutoff], predict=False, stop_randomization=True)
      

      【讨论】:

        猜你喜欢
        • 2020-12-31
        • 1970-01-01
        • 2021-04-24
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        相关资源
        最近更新 更多