使用 Keras 了解 LSTM 中的 input_shape 参数

Understanding input_shape parameter in LSTM with Keras

我正在尝试使用名为 "Stacked LSTM for sequence classification" 的 the example described in the Keras documentation(请参阅下面的代码),但无法在我的数据上下文中找出 input_shape 参数。

我输入了一个由 25 个可能的字符组成的序列矩阵,这些字符以整数编码为最大长度为 31 的填充序列。因此,我的 x_train 的形状为 (1085420, 31),意思是 (n_observations, sequence_length).

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

data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=5,
          validation_data=(x_val, y_val))

在此代码中,x_train 的形状为 (1000, 8, 16),即 1000 个数组的 8 个 16 元素数组。在那里,我完全迷失了我的数据是什么以及我的数据如何达到这种形状。

查看 Keras 文档以及各种教程和问答,我似乎遗漏了一些明显的东西。有人可以提示我要寻找什么吗?

感谢您的帮助!

因此输入到 LSTM 的数据应该具有 (nb_of_samples, seq_len, features) 的形状。在你的情况下——因为你的特征向量只包含一个整数——你应该调整你的 X_train 的大小应该有 (1085420, 31, 1) 的形状。由于此表示不太适合神经网络 - 您应该:

  1. 将您的表示更改为 one-hot 编码 - 那么您的输出应该具有形状 (1085420, 31, 25)

  2. 使用Embedding层并保留(1085420, 31)形状。