使用Keras了解LSTM中的input_shape参数

时间:2017-04-19 06:16:38

标签: matrix machine-learning keras lstm dimension

我正在尝试使用名为“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,我似乎错过了一些明显的东西。有人能给我一些要找的东西吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

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

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