我正在尝试使用名为“Stacked LSTM进行序列分类”的the example described in the Keras documentation(请参阅下面的代码),并且无法在我的数据上下文中找出input_shape
参数。
我输入了一个由25个可能字符组成的序列矩阵,这些字符以整数编码为最大长度为31的填充序列。因此,我的x_train
形状为(1085420, 31)
,意为{{1} }。
(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
,对于包含16个元素的8个数组的1000个数组的数组。在那里,我完全迷失了我的数据是什么以及如何达到这种形状。
看看Keras doc和各种教程以及Q& A,我似乎错过了一些明显的东西。有人能给我一些要找的东西吗?
感谢您的帮助!
答案 0 :(得分:2)
因此,LSTM
的数据输入应具有(nb_of_samples, seq_len, features)
形状。在您的情况下 - 因为您的要素向量只包含一个整数 - 您应该调整X_train
应该具有形状(1085420, 31, 1)
的大小。由于这种表示不适合神经网络 - 你应该:
将您的表示更改为 one-hot 编码 - 然后您的输出应具有形状(1085420, 31, 25)
。
使用Embedding
图层并保留(1085420, 31)
形状。