【问题标题】:如何将 4D 张量输入 LSTM 模型?
【发布时间】:2022-01-14 20:44:52
【问题描述】:

我想使用 LSTM 模型来预测未来的销售额。

数据如下表。

date       store family     sales
01/01/2013 1     AUTOMOTIVE 0    
01/01/2013 1     BABY CARE   0    
01/01/2013 1     BEAUTY     1    
..         .     ..         .    
01/01/2013 2     AUTOMOTIVE 0    
01/01/2013 2     BABY CARE   0    
..         .     ..         .    
01/01/2013 50     AUTOMOTIVE 0    
..         .     ..         .    
01/02/2013 1     AUTOMOTIVE 0    
01/02/2013 1     BABY CARE   50    
..         .     ..         .    
01/02/2013 2     AUTOMOTIVE 500  
01/02/2013 2     BABY CARE   0    
..         .     ..         .    
01/02/2013 50     AUTOMOTIVE 0    
..         .     ..         .    
..         .     ..         .    
12/31/2015 1     AUTOMOTIVE 0    
12/31/2015 1     BABY CARE   50    
..         .     ..         .    
12/31/2015 2     AUTOMOTIVE 500  
12/31/2015 2     BABY CARE   0    
..         .     ..         .    
12/31/2015 50     AUTOMOTIVE 0    
..         .     ..         .    

每天有 50 家商店。
对于每个商店,它都有不同类型的家庭(产品)。 (它们都井井有条,感谢上帝)。
最后,对于每种类型的家庭,它都有自己的销售额。

这就是问题所在。

LSTM模型的输入维度为(Batch_Size, Sequence_Length, Input_Dimension)。它是一个 3D 张量。

但是,就我而言,我的 Input_Dimension 是 2D,即 (rows x columns)
rows:行数一天内,即 1782
:特征数,即 2(商店和家庭)

有没有一种好方法可以让我的数据变成可以输入 LSTM 模型的形状?

非常感谢!

【问题讨论】:

    标签: python pytorch lstm recurrent-neural-network


    【解决方案1】:

    我想出的解决办法是把每天的整个数据做成一个long long long的序列。 所以维度是一维的,可以输入到 LSTM 模型中。

    但我认为这不是最佳解决方案。

    有人想出更好的答案吗? 欣赏。

    【讨论】:

    • 根据您对我的回复的评论,这是我知道的唯一方法。你也没有优势以另一种方式重塑它。另一方面,网络必须做很多额外的工作才能理解(1)商店之间的趋势是相关的,因此(2)一个商店的预测可以借鉴如何预测另一个商店的学习。
    【解决方案2】:

    这个概念很简单。然而,它在学习和预测过程中的工作方式不同,所以我将分别解释这两种情况。

    • 对于训练,您只需将您选择作为训练数据的序列部分切割成更小的时间点子序列。 (您需要这样做,因为网络在这些子序列的持续时间内是“展开”的,它不能太大;如果没有明显的选择,32 或 64 时间步应该是一个很好的起点。)为了最大限度地利用您的数据,您还希望您的子序列有一些重叠。 TF 和 PyTorch 都应该有一些帮助函数来帮助你获得这个(例如tf.keras.utils.timeseries_dataset_from_array)。您可能会发现这篇文章很有用:https://mobiarch.wordpress.com/2020/11/13/preparing-time-series-data-for-rnn-in-tensorflow/

    • 对于预测,您可以通过重塑来提供您的序列,使其成为第一维大小为 1 的 3D 张量。NumPy 中的 reshapenewaxis 都可以为您提供。当然,您不需要提供整个序列,只需返回足够数量的时间步长作为上下文,以使 RNN 的状态收敛到适当的值。

    【讨论】:

    • 谢谢。是的,我了解时间步长部分。
      但是,我想知道的是 "input_dimension" 部分。 tensorflow 和 pytorch 中的输入都是 (batch_size, timesteps, input_dimension)。但是我的数据中的 input_dimension 是 2D,这导致输入将是 4D。这不适合 LSTM 模型。
    • 等等,你是想把一天内所有店铺和所有家庭产品的数据作为一个数据点/时间步长输入吗?忘记尺寸,那只是糟糕的建模。每天对每个商店的模型进行分解,可能需要一个全球网络来考虑季节性或商店之间的任何其他相关性。
    • 是的,我正在尝试这样做,哈哈。我想我可以试一试,看看结果。然后,也许我会在我的数据上使用 PCA 来减少它的维度。
    • 你是什么意思“考虑季节性”。你的意思是创建几个 LSTM 模型并根据季节使用它们?
    • 查看我对您提出的解决方案的评论。 @88-gps
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2019-03-26
    • 2016-05-05
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多