#keras #lstm
#keras #lstm
Вопрос:
Я работаю над моделью прогнозирования с keras, используя слои LSTM, но у меня проблемы с пониманием того, как форматировать мои входные данные (модель возвращает nan также в зависимости от формата ввода).
Я постараюсь дать четкое объяснение!
Давайте назовем X моими входными данными, а y — моими выходными данными. Оба являются массивами одинаковой формы
X.shape = (20, 1001)
y.shape = (20, 1001)
Итак, в основном 20 выборок по 1001 значению в каждой.
Теперь давайте определим простую модель LSTM:
model = Sequential()
model.add(LSTM(32,activation='relu', input_shape=XXX ))
model.add(Dense(y.shape[1]))
Форма ввода (XXX) на данный момент оставлена пустой.
Плотный слой — это выходные данные. Таким образом, он имеет длину одного образца (1001)
Форма ввода для слоя LSTM — это 3D: (образцы, временные шаги, объекты)
Таким образом, мои входные данные могут быть переформатированы либо с учетом выборки с шагом 1 раз с 1001 функцией
X=trainX.reshape( (trainX.shape[0], 1, trainX.shape[1]) )
что дало бы input_shape в определении слоя
input_shape=(1, trainX.shape[1])
Или с учетом 1001 временных шагов с 1 функцией
X=trainX.reshape( (trainX.shape[0], trainX.shape[1], 1) )
и соответствующий input_shape
input_shape=(trainX.shape[1], 1)
Первая конфигурация (1 временной шаг, 1001 функция) работает.
Вторые конфигурации (1001 временной шаг, 1 функция) не работают. Обучение очень быстро возвращает значения nan.
Мой вопрос в том, почему второе решение возвращает значения nan (я предполагаю, что я, возможно, неправильно понял, что означает временные интервалы)?
Концептуально, учитывая, что мой входной массив представляет собой одну функцию, а несколько временных шагов имеют для меня больше смысла, чем наоборот.
В лучшем случае я бы просто попробовал оба варианта работы с наилучшими результатами.
Еще одна вещь! Предполагается, что LSTM сохраняет некоторую память (учитывая, что значение имеет направление чтения, которое затем может быть прочитано в противоположном направлении с помощью двунаправленного встроенного слоя). Если данные представлены как один временной шаг, но несколько функций, имеет ли значение эта «направленность» массива?
Извините за длинный пост, надеюсь, кто-нибудь сможет пролить свет на это!
Ответ №1:
временной ряд из 1001 слишком большой, если вы его используете, у вас будет либо проблема с исчезающим градиентом, либо с увеличивающимся градиентом, в вашем случае это увеличивающийся градиент, который делает ваши значения слишком большими.
Комментарии:
1. Хорошо, это объясняет проблемы. Каким будет диапазон временных шагов, с которым можно работать?
2. конкретного ответа на этот вопрос нет, но вы можете попробовать разные длины.