Я очень плохо знаком с моделями глубокого обучения и пытаюсь обучить модели с несколькими временными рядами, используя LSTM с Keras Sequential. В течение 50 лет проводится 25 наблюдений в год = 1250 выборок, поэтому не уверен, возможно ли вообще использовать LSTM для таких небольших данных. Тем не менее, у меня есть тысячи переменных функций, не считая временных задержек. Я пытаюсь предсказать последовательность следующих 25 временных шагов данных. Данные нормализованы между 0 и 1. Моя проблема в том, что, несмотря на попытки многих очевидных корректировок, я не могу получить потерю проверки LSTM где-нибудь близко к потере обучения (я думаю, что это слишком много).
Я попытался отрегулировать количество узлов на скрытый слой (25-375), количество скрытых слоев (1-3), выпадение (0,2-0,8), batch_size (25-375) и разделение поезда / теста (90 %: 10% - 50% -50%). Ничто на самом деле не имеет большого значения для различий между потерями при проверке / потере обучения.
# SPLIT INTO TRAIN AND TEST SETS
# 25 observations per year; Allocate 5 years (2014-2018) for Testing
n_test = 5 * 25
test = values[:n_test, :]
train = values[n_test:, :]
# split into input and outputs
train_X, train_y = train[:, :-25], train[:, -25:]
test_X, test_y = test[:, :-25], test[:, -25:]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 5, newdf.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 5, newdf.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
# design network
model = Sequential()
model.add(Masking(mask_value=-99, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(LSTM(375, return_sequences=True))
model.add(Dropout(0.8))
model.add(LSTM(125, return_sequences=True))
model.add(Dropout(0.8))
model.add(LSTM(25))
model.add(Dense(25))
model.compile(loss='mse', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=20, batch_size=25, validation_data=(test_X, test_y), verbose=2, shuffle=False)
Эпоха 19/20
- 14 с - потеря: 0,0512 - потери по величине: 188,9568
Эпоха 20/20
- 14 с - потеря: 0,0510 - потеря по величине: 188,9537
ссылка на участок потери Вала / Потери поезда
Полагаю, я, должно быть, делаю что-то явно не так, но не могу этого понять, так как я новичок. Я надеюсь либо получить некоторую полезную потерю проверки (по сравнению с обучением), либо знаю, что мои данные наблюдений просто недостаточно велики для полезного моделирования LSTM. Любая помощь или предложения высоко ценится, спасибо!