2017-04-19 79 views
1

我試圖使用the example described in the Keras documentation命名爲「Stacked LSTM for sequence classification」(請參見下面的代碼),但無法計算出我的數據上下文中的參數input_shape瞭解帶Keras的LSTM中的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個陣列16個元件的8個陣列的陣列。在那裏,我完全喪失了什麼以及我的數據如何達到這種形狀。

看着Keras doc和各種教程和Q & A,似乎我失去了一些明顯的東西。有人能給我提示尋找什麼嗎?

感謝您的幫助!

回答

1

因此輸入到LSTM的數據應該有形狀(nb_of_samples, seq_len, features)。在你的情況 - 作爲你的特徵向量只包含一個整數 - 你應該調整你的X_train應該有形狀(1085420, 31, 1)。由於這表示不是很適合於神經網絡 - 你應該:

  1. 您表示更改爲一個熱編碼 - 那麼你的輸出應該具有形狀(1085420, 31, 25)

  2. 使用Embedding層和離開(1085420, 31)形狀。