x_train shape (19192, 29)
y_train shape (19192,)
x_test shape (4799, 29)
y_test shape (4799,)
Если у вас есть pandas фрейм данных, преобразуйте их в массив numpy.
x_train = x_train.to_numpy()
y_train = y_train.to_numpy()
x_test = x_test.to_numpy()
y_test = y_test.to_numpy()
Сначала вам необходимо изменить данные.
x_train = x_train.reshape(19192, 29, 1)
y_train = y_train.reshape(19192,1)
x_test = x_test.reshape(4799, 29, 1)
y_test = y_test.reshape(4799,1)
Теперь, обычно для размеров LSTM:
0 - Samples. One sequence is one sample. A batch is comprised of one or more samples.
1 - Time Steps. One time step is one point of observation in the sample.
2 - Features. One feature is one observation at a time step.
Итак, в третьем 1 мы добавляем измерение, соответствующее объектам.
Форма ввода LSTM будет (29,1) (29 = временные шаги, 1 = количество объектов на временную последовательность (также для простоты вы можете думать об этом как о количестве каналов, как в CNN)
model = Sequential()
model.add(LSTM(units = 10, input_shape = (29,1), return_sequences = False)) # keep other parameters default if you're not sure
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid'))
Заметьте, мы добавляем return_srquence = True для первого слоя, но для второго слоя LSTM этого не происходит. Причина в том, что LSTM нужны трехмерные данные (партия, время, объекты), а Dense нужны двумерные данные (партия, функции), когда мы видим return_sequence = True, мы отправляем 3D-данные на следующий слой для Dense, вместо этого мы отправляем 2D-данные.
model = Sequential()
model.add(LSTM(units = 10, input_shape = (29,1), return_sequences = True))
model.add(LSTM(units = 10, return_sequences = False))
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid'))