首页 > 解决方案 > 如何为 Keras LSTM 正确构建 3D 输入

问题描述

我有一个数据集,其中包含许多及时的快照观察和一个 1 或 0 作为每个观察的标签。假设每个观察包含 3 个特征。我想训练一个 LSTM,它将接受一系列 n 个观察并尝试将第 n 个观察分类为 1 或 0。

因此,如果我们有一个如下所示的数据集:

# X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
# y = [1, 0, 1, 0]
# so X[0] = y[0], X[1] = y[1]
# . and I would like to input X[0] + X[1] to classify X[1] as y[1]
# . How would I need to structure this below?


X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
y = [1, 0, 1, 0]

def create_model():
  model = Sequential()
  # input_shape[0] is equal to 2 timesteps?
  # input_shape[1] is equal to the 3 features per row?
  model.add(LSTM(20, input_shape=(2, 3)))
  model.add(Dense(1, activation='sigmoid'))
  model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
  model.summary()

m = create_model()
m.fit(X, y)

因此,我希望X[0]X[1]成为一次训练迭代的输入,应归类为y[1].

我的问题是这个。如何构建模型以正确获取此输入?我很困惑input_shape,,,features等......input_lengthbatches

标签: pandasnumpykerasdeep-learninglstm

解决方案


下面的代码片段可能有助于澄清:

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

# Number of samples = 4, sequence length = 3, features = 2

X = np.array( [ [ [0, 1], [1, 0,], [1, 1] ], 
                [ [1, 1], [1, 1,], [1, 0] ], 
                [ [0, 1], [1, 0,], [0, 0] ], 
                [ [1, 1], [1, 1,], [1, 1] ]] )

y = np.array([[1], [0], [1], [0]])
print(X)
print(X.shape)
print(y.shape)

model = Sequential()
model.add(LSTM(20, input_shape=(3, 2)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()

model.fit(X, y)

此外,在 Keras 文档页面上:https : //keras.io/getting-started/sequential-model-guide/ 查看底部附近的“用于序列分类的堆叠 LSTM”的示例。它可能会有所帮助。

通常使用 Keras,批量维度/样本维度没有在层中指定 - 它是从输入数据中自动推断出来的。

我希望这有帮助。


推荐阅读