LSTM在传递数组时期望某些尺寸的错误

时间:2019-10-21 21:54:00

标签: python keras lstm

我一直在尝试对数据使用here中的想法。但是,我遇到了以下错误:

“ ValueError:检查输入时出错:预期lstm_16_input具有3维,但数组的形状为(8,4)”

我要运行的内容:

def main():
    #X, Y = load_data()
    X, Y = load_file()
    print("------")    
    print(X)
    print(X.shape)
    print(type(X))
    print("------")
    print(Y)
    print(Y.shape)
    print(type(Y))
    print("------")

    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33)

    model = build_model(150, 100)

    # Error: ValueError: Error when checking input: expected lstm_16_input to have 3 dimensions, but got array with shape (8, 4)
    model.fit(X_train, y_train, nb_epoch=200, batch_size=100, verbose=2)

我在哪里定义模型:

def build_model(first_layer_neurons, second_layer_neurons):
    model = Sequential()
    model.add(LSTM(first_layer_neurons, input_dim=NUMBER_OF_FEATURES, dropout_U=0.3))
    model.add(Dense(second_layer_neurons))
    model.add(Dropout(0.2))
    # model.add(Flatten()) What I tried
    model.add(Dense(NUMBER_OF_CLASSES, activation="softmax"))
    model.compile(loss="categorical_crossentropy",
                  optimizer="adam",
                  metrics=["accuracy"])
    return model

我的数据具有以下类型和形状:

enter image description here

如果需要,我正在使用:

NUMBER_OF_FEATURES = 5
NUMBER_OF_TIME_STEPS = 50
NUMBER_OF_CLASSES = 4
TEMP_DIR = "temp/"
SEED = 7

我试图在模型上添加flatten(),但这不起作用。

1 个答案:

答案 0 :(得分:0)

LSTM采用(n_samples, n_timesteps, n_features)形状的输入。您应该将数据重塑为这种格式。例如,如果原始输入数据的形状为(1000, 5),则可以将其分为10个样本,每个样本具有100个时间步长,从而获得形状为(10, 100, 5)的输入。您也可以有重叠的样本。

也应该对输出进行相同的重塑。因此,如果原始输出形状为(1000, 1),则应将其重塑为(10, 100, 1)

请注意,n_timsteps是一个超参数,您应该使用对数据的了解或仅通过超参数调整来决定。