Ошибка Tensorflow / keras: ValueError: Ошибка при проверке ввода: ожидалось, что lstm_input будет иметь 3 измерения, но получит массив с формой (4012, 42) - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть pandas фрейм данных, который создается с помощью train_test_split, называемого x_train, с 4012 строками, все значения в фрейме данных являются либо int, либо float (после разделения поезда / теста) и 42 столбцами (после разделения поезда / теста) , Я пытаюсь обучить рекурсивную нейронную сеть с ячейками LSTM, но моя программа продолжает выдавать ошибку, когда модель пытается ввести фрейм данных. Я пытался изменить структуру данных, это тоже не работает, но, возможно, я делаю это неправильно. Пожалуйста, дайте мне знать, если вы знаете, как это исправить и / или знаете, как я могу сделать мою модель более эффективной.

Вот мой код:

df = pd.read_csv("data.csv")

x = df.loc[:, df.columns != 'result']
y = df.loc[:, df.columns == 'result']

y = y.astype(int)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, shuffle = False)

model = Sequential()

model.add(LSTM(128, input_shape = (4012, 42), activation = 'relu', return_sequences = True)) #This is the line where the error happens.
model.add(Dropout(0.2))

model.add(LSTM(128, activation = 'relu'))
model.add(Dropout(0.2))

model.add(Dense(32, activation = 'relu'))
model.add(Dropout(0.2))

model.add(Dense(2, activation = 'softmax'))

opt = tf.keras.optimizers.Adam(lr = 10e-3, decay=1e-5)

model.compile(loss = 'sparse_categorical_crossentropy', optimizer = opt, metrics = ['accuracy'])

model.fit(x_train, y_train, epochs = 5, validation_data = (x_test, y_test))

Ошибка, которую я получение:

ValueError: Ошибка при проверке ввода: ожидалось, что lstm_input имеет 3 измерения, но получил массив с формой (4012, 42)

Кто-то, пожалуйста, помогите мне.

1 Ответ

3 голосов
/ 08 апреля 2020

Проблема в том, что вы пытаетесь передать 2-мерный массив для модели, но он ожидает 3-мерный массив. Вместо изменения формы Dataframe преобразуйте его в массив, а затем измените форму в соответствии с измененным кодом ниже.

df = pd.read_csv("data.csv")

x = df.loc[:, df.columns != 'result']
y = df.loc[:, df.columns == 'result']

y = y.astype(int)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, shuffle = False)
x_train = x_train.values.reshape((1, x_train.shape[0], x_train.shape[1]))
x_test = x_test.values.reshape((1, x_test.shape[0], x_test.shape[1]))



y_train = y_train.values.reshape((1, y_train.shape[0], y_train.shape[1]))
y_test = y_test.values.reshape((1, y_test.shape[0], y_test.shape[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...