У меня есть немного самообучаемых знаний по работе с алгоритмами машинного обучения (базовый материал типа «Случайный лес» и «Линейная регрессия»). Я решил расшириться и начать изучать RNN с Керасом. Рассматривая большинство примеров, которые обычно включают прогнозирование запасов, я не смог найти каких-либо базовых примеров реализации нескольких функций, кроме одного столбца, представляющего дату объекта, а другого - выходных данных. Есть ли какая-то ключевая вещь, по которой я скучаю или что-то еще?
Если у кого-то есть пример, я был бы очень признателен.
Благодарность!
machine-learning
neural-network
keras
Rjay155
источник
источник
multiple features
здесь более конкретный вопрос о том, как использовать RNN для прогнозирования временных рядов с функциями, содержащими числовые и нечисловые данные?Ответы:
Рекуррентные нейронные сети (RNN) предназначены для изучения данных последовательности. Как вы догадываетесь, они определенно могут принимать несколько функций в качестве входных данных! RNN Keras принимают двумерные входы ( T , F ) временных шагов T и функции F (здесь я игнорирую размер пакета).
Однако вам не всегда нужны или нужны промежуточные временные шаги, t = 1, 2 ... ( T - 1). Поэтому Keras гибко поддерживает оба режима. Чтобы он вывел все T временных шагов, передайте
return_sequences=True
свой RNN (например,LSTM
илиGRU
) при создании. Если вам нужен только последний временной шаг t = T , используйтеreturn_sequences=False
(по умолчанию, если вы не переходитеreturn_sequences
к конструктору).Ниже приведены примеры обоих этих режимов.
Пример 1: Изучение последовательности
Вот быстрый пример обучения LSTM (тип RNN), который поддерживает всю последовательность вокруг. В этом примере каждая точка входных данных имеет 2 временных шага, каждый с 3 функциями; выходные данные имеют 2 временных шага (потому что
return_sequences=True
), каждый с 4 точками данных (потому что это размер, который я передаюLSTM
).Пример 2. Изучение последнего временного шага
Если, с другой стороны, вы хотите обучить LSTM, который выводит только последний временной шаг в последовательности, то вам нужно установить
return_sequences=False
(или просто полностью удалить его из конструктора, посколькуFalse
это значение по умолчанию). А затем ваши выходные данные (data_y
в приведенном выше примере) необходимо переставить, так как вам нужно только указать последний временной шаг. Таким образом, во втором примере каждая точка входных данных по-прежнему имеет 2 временных шага, каждый с 3 функциями. Выходные данные, однако, представляют собой просто один вектор для каждой точки данных, потому что мы сгладили все до одного временного шага. Каждый из этих выходных векторов все еще имеет 4 особенности (потому что это размер, который я передаюLSTM
).источник
data_x
просто содержали бы одну точку данных, и эта точка данных имела бы четыре временных шага, каждое из 3-х измерений (и аналогично, вы должны были бы объединитьdata_y
таким же образом). Количество используемых вами временных шагов просто зависит от того, что вы пытаетесь смоделировать (и сколько временных шагов относится к этому процессу).