Задать вопрос
@saneok44

Keras LSTM срыв градиента, как выйти из данной ситуации?

Всех приветствую кто решил заскочить!
Построил нейронную сеть по мануалам с сайтов все бы ничего но везде используется малый датасет и нейронка с функцией активации ReLU работает как надо по моим тестам все отрабатывает как надо с датасетом не более чем из 500 наблюдений. Но когда я ухожу к более масштабному датасету для тренировки loss уходит в NuN. Пробовал как пишут выставлять градиент отсечки clipvalue да помогло но в результате предсказание ряда никакое ... игрался с этим параметром но все безуспешно. Перебирал разные оптимизаторы, нормализовал данные толку 0. Датасет из 10 колонок по 4000 значений в каждой. Проверял на Null, нулов нет. Также тестил на рандомных значениях без каких либо считываний из вне. Уже не знаю что делать.
Менял функцию активации на tanh все вроде бы выглядит неплохо loss: за сотые уходит с каждой эпохой. И предсказанный временной ряд вроде бы с исходным похож. Именно вроде бы. Один раз подсунул после обучения тестовую выборку, за тестовой выборкой был небольшой скачек по данным так сеть повторила этот скачек причем почти 1 в 1. Закрадывается такое ощущение что она не предсказывает, а тупо повторяет... как то не правдоподобно выглядит.
3000 - весь датасет
2800 - тренинг
100 - входные
100 - предсказаны
Как все поделено
60bbd2a9668ea847166721.png
Предсказание последних 100 наблюдений
60bbd2d1891d9649850554.png
Такие пики в предсказание ряда не должны были попасть, но опять же повторюсь либо она повторила входные тестовые данные или я что то не понимаю. Но как мне кажется таких пиков не должно быть там.
Сроки жмут даже не знаю че еще сделать...

Откуда бралась инфа Multiple Parallel Input and Multi-Step Output
https://machinelearningmastery.com/how-to-develop-...

часть модели
self.model = Sequential()
        self.model.add(LSTM(300, activation='tanh', input_shape=(self.n_steps_in, self.n_features)))
        self.model.add(RepeatVector(self.n_steps_out))
        self.model.add(LSTM(200, activation='tanh', return_sequences=True))
        self.model.add(TimeDistributed(Dense(100, activation='tanh')))
        self.model.add(TimeDistributed(Dense(self.n_features)))
        self.model.compile(loss='mse', optimizer='adam')
  • Вопрос задан
  • 60 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
@imageman
Данные для тренировки перемешиваете?
Размер минибатча какой?
Уменьшить (увеличить) размер нейросети пробовали?

https://habr.com/ru/post/334944/ (37-й пункт, но прочитать и первые 36 тоже стоит)

(How to deal with NaNs https://web.archive.org/web/20180207100912/http://...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы