Keras的LSTM的时间表是什么?

时间:2019-01-02 16:16:58

标签: python tensorflow keras lstm

我在Keras中实施LSTM遇到了一些麻烦。

我的训练集的结构如下:

  • 序列数:5358
  • 每个序列的长度为300
  • 序列的每个元素都是54个特征的向量

我不确定如何为有状态LSTM调整输入。

在本教程http://philipperemy.github.io/keras-stateful-lstm/之后,我创建了子序列(在我的情况下,有1452018个子序列,window_size = 30)。

为状态LSTM的输入重塑数据的最佳选择是什么?

在这种情况下,输入的时间步是什么意思?为什么呢?

batch_size是否与时间步长有关?

1 个答案:

答案 0 :(得分:2)

  

我不确定如何为有状态LSTM调整输入。

LSTM(100, statefull=True)

但是在使用有状态LSTM之前,请问自己我是否真的需要statefull LSTM?有关更多详细信息,请参见herehere

  

重塑状态LSTM数据的最佳选择是什么   输入吗?

这实际上取决于手上的问题。但是,我认为您不需要重塑就可以直接将数据直接输入到Keras:

input_layer = Input(shape=(300, 54))
  

在这种情况下,输入的时间步是什么意思?为什么呢?

在您的示例中,时间戳为300。有关时间戳的更多详细信息,请参见here。在下图中,我们有5个时间戳,它们将它们输入到LSTM网络中。

enter image description here

  

batch_size是否与时间步长有关?

否,与batch_size无关。可以在here中找到有关batch_size的更多详细信息。


这是基于您提供的描述的简单代码。它可能会给您一些直觉:

import numpy as np
from tensorflow.python.keras import Input, Model
from tensorflow.python.keras.layers import LSTM
from tensorflow.python.layers.core import Dense

x_train = np.zeros(shape=(5358, 300, 54))
y_train = np.zeros(shape=(5358, 1))

input_layer = Input(shape=(300, 54))
lstm = LSTM(100)(input_layer)
dense1 = Dense(20, activation='relu')(lstm)
dense2 = Dense(1, activation='sigmoid')(dense1)

model = Model(inputs=input_layer, ouputs=dense2)
model.compile("adam", loss='binary_crossentropy')
model.fit(x_train, y_train, batch_size=512)