Я пытаюсь обучить рекуррентную нейронную сеть LSTM для классификации последовательностей.
Мои данные имеют следующий вид:
Input: [1,5,2,3,6,2, ...] -> Output: 1
Input: [2,10,4,6,12,4, ...] -> Output: 1
Input: [4,1,7,1,9,2, ...] -> Output: 2
Input: [1,3,5,9,10,20, ...] -> Output: 3
.
.
.
Итак, в основном я хочу предоставить последовательность в качестве ввода и получить целое число в качестве вывода.
Каждая входная последовательность имеет длину = 2000 чисел с плавающей запятой, и у меня есть около 1485 образцов для обучения.
На выходе получается целое число от 1 до 10.
Вот что я пытался сделать:
# Get the training numpy 2D array for the input (1485X 2000).
# Each element is an input sequence of length 2000
# eg: [ [1,2,3...], [4,5,6...], ... ]
x_train = get_training_x()
# Get the training numpy 2D array for the outputs (1485 X 1).
# Each element is an integer output for the corresponding input from x_train
# eg: [ 1, 2, 3, ...]
y_train = get_training_y()
# Create the model
model = Sequential()
model.add(LSTM(100, input_shape=(x_train.shape)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(x_train, y_train, nb_epoch=3, batch_size=64)
Я получаю следующую ошибку:
Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (1485, 2000)
Вместо этого я попытался использовать это:
model.add(LSTM(100, input_shape=(1485, 1, 2000)))
Но на этот раз произошла другая ошибка:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
Может ли кто-нибудь объяснить, какова моя форма ввода? а что я делаю не так?
Спасибо