Я пытался повторно использовать идею из здесь на моих данных. Однако у меня возникли проблемы с ошибкой:

«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 () на моей модели, но это не работает.

0
Fabio Soares 22 Окт 2019 в 00:54

1 ответ

LSTM принимает ввод формы (n_samples, n_timesteps, n_features). Вы должны изменить свои данные в этот формат. Например, если ваши исходные входные данные имеют форму (1000, 5), вы можете разделить их на 10 выборок, каждый с 100 временными шагами, и, таким образом, получить входные данные формы (10, 100, 5). Вы можете иметь перекрывающийся образец тоже.

Такое же изменение должно произойти и с выводом. Поэтому, если исходная форма вывода - (1000, 1), вам следует изменить ее на (10, 100, 1).

Обратите внимание, что n_timsteps - это гиперпараметр, который вы должны решить, используя понимание ваших данных или просто путем настройки гиперпараметра.

0
SaTa 24 Окт 2019 в 06:44