2017-06-22 460 views
3

我的輸入是簡單地用339732行和兩列的CSV文件:錯誤模型輸入:預期lstm_1_input有3個維度,但得到了與形狀陣​​列(339732,29)

  • 第一個是29特徵值,即X
  • 第二個是一個二進制標記值,即ÿ

我想訓練上堆疊LSTM模型我的數據:

data_dim = 29 
timesteps = 8 
num_classes = 2 

model = Sequential() 
model.add(LSTM(30, return_sequences=True, 
       input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 30 
model.add(LSTM(30, return_sequences=True)) # returns a sequence of vectors of dimension 30 
model.add(LSTM(30)) # return a single vector of dimension 30 
model.add(Dense(1, activation='softmax')) 

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

model.summary() 
model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1) 

這引發錯誤:

Traceback (most recent call last): File "first_approach.py", line 80, in model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)

ValueError: Error when checking model input: expected lstm_1_input to have 3 dimensions, but got array with shape (339732, 29)

我嘗試使用X_train.reshape((1,339732, 29))重塑我的輸入,但沒有奏效示值誤差:

ValueError: Error when checking model input: expected lstm_1_input to have shape (None, 8, 29) but got array with shape (1, 339732, 29)

我怎麼能養活我輸入LSTM?

回答

3

設置timesteps = 1(因爲,我要爲每個實例一個時步)和重塑X_train和X_test爲:

X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1])) 
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1])) 

這個工作!

1

對於timesteps != 1,可以使用下面的函數(改編自here

import numpy as np 
def create_dataset(dataset, look_back=1): 
    dataX, dataY = [], [] 
    for i in range(len(dataset)-look_back+1): 
    a = dataset[i:(i+look_back), :] 
    dataX.append(a) 
    dataY.append(dataset[i + look_back - 1, :]) 
    return np.array(dataX), np.array(dataY) 

實例

X = np.reshape(range(30),(3,10)).transpose() 
array([[ 0, 10, 20], 
     [ 1, 11, 21], 
     [ 2, 12, 22], 
     [ 3, 13, 23], 
     [ 4, 14, 24], 
     [ 5, 15, 25], 
     [ 6, 16, 26], 
     [ 7, 17, 27], 
     [ 8, 18, 28], 
     [ 9, 19, 29]]) 

create_dataset(X, look_back=1) 
(array([[[ 0, 10, 20]], 
     [[ 1, 11, 21]], 
     [[ 2, 12, 22]], 
     [[ 3, 13, 23]], 
     [[ 4, 14, 24]], 
     [[ 5, 15, 25]], 
     [[ 6, 16, 26]], 
     [[ 7, 17, 27]], 
     [[ 8, 18, 28]], 
     [[ 9, 19, 29]]]), 
array([[ 0, 10, 20], 
     [ 1, 11, 21], 
     [ 2, 12, 22], 
     [ 3, 13, 23], 
     [ 4, 14, 24], 
     [ 5, 15, 25], 
     [ 6, 16, 26], 
     [ 7, 17, 27], 
     [ 8, 18, 28], 
     [ 9, 19, 29]])) 

create_dataset(X, look_back=3) 
(array([[[ 0, 10, 20], 
     [ 1, 11, 21], 
     [ 2, 12, 22]], 
     [[ 1, 11, 21], 
     [ 2, 12, 22], 
     [ 3, 13, 23]], 
     [[ 2, 12, 22], 
     [ 3, 13, 23], 
     [ 4, 14, 24]], 
     [[ 3, 13, 23], 
     [ 4, 14, 24], 
     [ 5, 15, 25]], 
     [[ 4, 14, 24], 
     [ 5, 15, 25], 
     [ 6, 16, 26]], 
     [[ 5, 15, 25], 
     [ 6, 16, 26], 
     [ 7, 17, 27]], 
     [[ 6, 16, 26], 
     [ 7, 17, 27], 
     [ 8, 18, 28]], 
     [[ 7, 17, 27], 
     [ 8, 18, 28], 
     [ 9, 19, 29]]]), 
array([[ 2, 12, 22], 
     [ 3, 13, 23], 
     [ 4, 14, 24], 
     [ 5, 15, 25], 
     [ 6, 16, 26], 
     [ 7, 17, 27], 
     [ 8, 18, 28], 
     [ 9, 19, 29]])) 
相關問題