了解 LSTM 的输入

数据挖掘 深度学习 lstm
2021-09-16 05:02:31

我对 LSTM 的输入有点困惑。基本上我的火车输入数据是形状 (53394, 3)。我将我的 2D 数据重塑为 3D 数据,以便根据 LSTM 的输入进行设置。我有两种配置:

  1. trainX = (53394, 3, 1)
    model.add(LSTM(32,input_shape =(trainX.shape[1], trainX.shape[2]))
    
  2. trainX = (53394,1, 3)
    model.add(LSTM(32,input_shape =(trainX.shape[1], trainX.shape[2]))
    

我想了解在这两种情况下输入是如何输入 LSTM 的。就像一个神经元取一列值或一整行三列作为输入层中的一个神经元的输入。

2个回答

LSTM 层处理具有以下结构(nb_sequence、nb_timestep、nb_feature)的 3D 数据。

  • nb_sequence 对应于数据集中的序列总数(如果您使用的是小批量学习,则对应于批量大小)。
  • nb_timestep 对应于序列的大小。
  • nb_feature 对应于描述每个时间步长的特征数。

因此,LSTM 层将像这样工作:
ti成为ith序列的时间步长seqj, 和i[0,nb_timestep], j[0,nb_sequence].
LSTM 层将进行预测pi 根据 nb_feature 的描述符 ti 关于它的隐藏状态,它是时间步长的表示 t0ti1.


现在,让我们看看这对您的两种配置意味着什么。为了便于解释,我假设我们有单词序列

  • 对于 (53394, 3, 1),LSTM 将处理 53394 个不同的序列。每个序列长 3 个单词,每个单词仅通过一个特征描述。对于每个序列的第一个单词,LSTM 将对其唯一的描述符进行预测。对于第二个词,将根据第一个词的唯一描述符进行预测。最后,对于序列中的第三个和最后一个单词,LSTM 将根据唯一描述符发出关于前两个单词的预测。然后,LSTM 为以下序列重新开始该过程。
  • 对于 (53394, 1, 3),您的序列仅包含一个通过 3 个特征描述的单词。一个单词的序列并不是真正的序列,因此 LSTM 层在这种情况下将没有用处。

希望它能弄清楚如何将数据馈送到 LSTM !


注意。与问题无关,但它可能会有所帮助:从您的原始形状来看,您的数据集似乎包含 53394 个单词,描述了 3 个特征。如果我是对的,您将需要像 (53394, nb_timestep, 3) 这样的 3D 形状,但要使用nb_timestep1. 那么你需要的是定义一些窗口而不是重塑你的数据。

循环单元(LSTM,还有 GRU 和基本 RNN 单元)的输入遵循以下模式:

( number of observations , lenght of input sequence , number of variables )

假设您lenght of input sequence是 3,并且只有一个变量,您可以使用:

LSTM(32, input_shape=(3, 1))

正如你所看到的,当你声明一个不需要指定的LSTM()层时,Keras 会自动处理它number of observations

在此之前,您必须将矩阵重塑为(53394, 3, 1). 您可以使用np.expand_dims().reshape()命令。