2017-06-22 464 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]])) 
相关问题