Ответ 1
Эй, Райан!
Я знаю это поздно, но я просто наткнулся на ваш вопрос, надеюсь, что это не слишком поздно или что вы все еще находите некоторые знания здесь.
Сначала, Stackoverflow может быть не лучшим местом для такого рода вопросов. Первая причина - у вас есть концептуальный вопрос, который не является целью этого сайта. Кроме того, ваш код работает, и это даже не вопрос общего программирования. Посмотрите stats.
Второй из того, что я вижу, нет концептуальной ошибки. Вы используете все необходимое, что:
- lstm с размерами пробки
-
return_sequences=false
непосредственно перед слоемDense
- линейная активация для вашего выхода
-
mse
функция затрат/потерь/целевых функций
Третий Тем не менее, я считаю крайне маловероятным, чтобы ваша сеть узнала что-либо с таким количеством данных. Вы должны понимать, что у вас меньше данных, чем здесь! Для подавляющего большинства контролируемых алгоритмов обучения первое, что вам нужно, это не хорошая модель, это хорошие данные. Вы не можете учиться на нескольких примерах, особенно не на сложной модели, такой как сети LSTM.
Четвертый Кажется, что ваши целевые данные сделаны из относительно высоких значений. Первым шагом предварительной обработки здесь может быть стандартизация данных: центр вокруг нуля - это перевод ваших данных по среднему значению - и изменение масштаба стандартным отклонением ists. Это действительно помогает учиться!
Пятая. В общем, вот несколько вещей, которые вы должны изучить, чтобы улучшить обучение и уменьшить переобучение:
- Dropout
- Базовая нормализация
- Другие оптимизаторы (такие как Adam)
- Градиентная обрезка
- Случайный поиск гиперпараметров
- (Это не исчерпывающе, если вы читаете это и думаете, что что-то нужно добавить, прокомментируйте его, чтобы оно было полезно для будущих читателей!)
Последнее, но НЕ наименее Я предлагаю вам изучить этот учебник по Github, особенно повторяющийся учебник для временных рядов с keras.
PS: Даниэль Хник обновил свой post;)