Keras:如何将 2-D 数据(时间、特征向量)整形为 3D

Keras: How to shape 2-D data (time, feature vector) into 3D

我有一个长度为8474的训练数据,每个元素都是离散时间的5维特征向量。我正在尝试 运行 Keras 中的 LSTM:

 x_training, x_testing = x_data[:8475], x_data[8475:]
 y_training, y_testing = y_data[:8475], y_data[8475:]

 primary = Sequential()
 primary.add(LSTM(4,input_shape=(5,)))
 primary.add(LSTM(4, activation='sigmoid'))
 primary.add(Dense(1))

 primary.compile(optimizer='rmsprop', 
                 loss='binary_crossentropy', 
                 metrics=['accuracy'])

 primary.fit(x_training, y_training, batch_size=20, epochs=10, shuffle=False)
 score, accuracy = primary.evaluate(x_testing, y_testing, batch_size=20, verbose=0)

并且:

ValueError: Input 0 is incompatible with layer lstm_4: expected ndim=3, found ndim=2

我知道我必须使用设置(nb_samples、nb_included_previous_days、功能)将这个 8475 X 5 数据转换为 3D 数据,但我不明白:有什么区别训练数据的时间步长和长度?我还漏掉了什么吗?

What is the difference between the timestep and length of training data? Am I missing something else?

时间步长是模型中 RNN/LSTM 个细胞的数量,这取决于您的序列长度。

首先要使用 LSTM,您需要将训练数据转换为 3D 格式。假设您正在处理一些时间序列问题,并且为了预测训练数据中的每个瞬间,您认为 previous/adjacent 10 个训练瞬间很重要。在这种情况下,您的每个训练时刻都将具有 [10, num of feature in each training sample(5 in this case)] 的形状。所以我想你几乎不需要修改就可以创建新的训练数据,其中每个时刻都是所需训练样本的序列矩阵。

训练数据的形状将为 [number of training samples(8074), seq_length(10), num_features(5)]

将 LSTM 单元格中的输入形状更改为 [sequence_length, num_features],即 (10,5)。

这只是我对概念的有限理解,希望能奏效。