使用 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)
的形状。由于此表示不太适合神经网络 - 您应该:
将您的表示更改为 one-hot 编码 - 那么您的输出应该具有形状 (1085420, 31, 25)
。
使用Embedding
层并保留(1085420, 31)
形状。
我正在尝试使用名为 "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)
的形状。由于此表示不太适合神经网络 - 您应该:
将您的表示更改为 one-hot 编码 - 那么您的输出应该具有形状
(1085420, 31, 25)
。使用
Embedding
层并保留(1085420, 31)
形状。