2017-08-03 146 views
4

这是我的输入数据的形状:如何训练Keras LTSM多维输入?

>> print(X_train.shape) 
(1125, 75, 2) 

然后我试图通过这种方式来构建模型:

model = Sequential() 

model.add(LSTM(
    output_dim=50, 
    input_shape = (75, 2), 
    #input_shape = X_train.shape[1:], 
    return_sequences=True)) 
model.add(Dropout(0.2)) 

model.add(LSTM(
    100, 
    return_sequences=False)) 
model.add(Dropout(0.2)) 

model.add(Dense(
    output_dim=1)) 
model.add(Activation("linear")) 

model.compile(loss="mse", optimizer="rmsprop") 

model.fit(
    X_train, 
    y_train, 
    batch_size=512, 
    nb_epoch=5, 
    validation_split=0.1, 
    verbose=0, 
    shuffle=True) 

但它返回以下错误,当配件:

ValueError: Error when checking model target: expected activation_32 to have 2 dimensions, but got array with shape (1125, 75, 2)

这是完整的错误输出:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-48-b209fe29a91d> in <module>() 
    152   verbose=0, 
--> 153   shuffle=True) 
    154 

/usr/local/lib/python3.5/dist-packages/keras/models.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs) 
    670        class_weight=class_weight, 
    671        sample_weight=sample_weight, 
--> 672        initial_epoch=initial_epoch) 
    673 
    674  def evaluate(self, x, y, batch_size=32, verbose=1, 

/usr/local/lib/python3.5/dist-packages/keras/engine/training.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch) 
    1114    class_weight=class_weight, 
    1115    check_batch_axis=False, 
-> 1116    batch_size=batch_size) 
    1117   # prepare validation data 
    1118   if validation_data: 

/usr/local/lib/python3.5/dist-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size) 
    1031         output_shapes, 
    1032         check_batch_axis=False, 
-> 1033         exception_prefix='model target') 
    1034   sample_weights = standardize_sample_weights(sample_weight, 
    1035              self.output_names) 

/usr/local/lib/python3.5/dist-packages/keras/engine/training.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 
    110         ' to have ' + str(len(shapes[i])) + 
    111         ' dimensions, but got array with shape ' + 
--> 112         str(array.shape)) 
    113    for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])): 
    114     if not j and not check_batch_axis: 

ValueError: Error when checking model target: expected activation_32 to have 2 dimensions, but got array with shape (1125, 75, 2) 

我在做什么错?我遵循this tutorial of Keras documentation

+0

如果将input_shape =(75,2)放入第一个LSTM定义中,会发生什么情况? – rmeertens

+0

@ rmeertens是的,我也试过,但是在安装时出现同样的错误。我已经更新了答案,请检查一下。 :) – harrison4

+1

什么是'y_train'形状? –

回答

1

你的问题不在于你的输入形状,而是输出形状。您需要重新检查您的y_train是否具有适当的形状。