Основное внимание в этой записной книжке, чтобы вы были уверены, - это подготовка данных и настройка параметров с помощью Tensorflow.

Рекуррентные нейронные сети - это мощный инструмент для прогнозирования, когда используются данные временных рядов. Когда я впервые начал читать о них, я наткнулся на сообщение в блоге, в котором говорилось: «Лучший способ изучить RNN - это использовать их». Непосредственный переход к математической стороне RNN может быть довольно сложной задачей. Хотя математика важна, возможность использовать RNN с такими инструментами, как Tensorflow, действительно укрепит уверенность, и я бы рекомендовал это.

В этой статье мы рассмотрим:

  1. Генерация данных
  2. Подготовка данных с использованием Tensorflow
  3. Обучение модели и настройка параметров
  4. Прогноз

Давайте начнем! Полный код доступен здесь.

  1. Создание данных

Перед созданием набора данных напишем импорт.

В этой статье я использую данные временных рядов, которые я создал в следующем коде. Это сезонные данные с периодом 90 дней, и я также добавил к ним некоторый шум. И давайте разделим наши тренировочные и тестовые данные.

2. Подготовка данных

Когда у нас будут данные, давайте приступим к их подготовке из RNN.

Архитектура RNN учитывает временные данные и может использовать их для прогнозирования будущей ценности. У нас есть одномерный временной ряд только с одной переменной Value! Имея эти данные, теперь мы хотим создать данные временного ряда с m значениями из прошлого, и давайте спрогнозируем ближайшее будущее значение, то есть в m + 1 раз. Здесь одна точка данных представляет собой серию значений (m X 1). Давайте сделаем это с помощью следующего кода. В этом примере давайте используем размер окна 30. Здесь мы узнаем, как использовать функцию данных Tensorflow. Но прежде необходимо сделать следующие ключевые моменты.

  1. Чтобы гарантировать, что алгоритм не извлекает уроки из порядка данных, всегда перемешивайте данные.
  2. Попробуйте несколько размеров окон и выберите тот, который работает.
  3. Здесь, поскольку мы знаем, что сезонность данных составляет 90 дней, этот размер окна или любой больший размер окна должны работать.

Вот код для преобразования наших данных в формат данных временных рядов с помощью Tensorflow. Давайте сначала посмотрим, какие API-интерфейсы данных TensorFlow управляют нашими данными.

Обратите внимание, что в функции timeSeriesDataset () мы добавляем единицу к размеру окна. Это сделано для того, чтобы дополнительная точка данных позже использовалась в качестве будущего значения прогноза, как показано в следующих строках кода. Здесь мы разбиваем набор данных на партии. Рекомендуется иметь размер пакета, кратный двум, так как с учетом конструкции памяти на вашем ПК, вероятно, будут лучшие результаты. Я использую 32, так как наш набор данных не очень большой.

Теперь у нас готов набор обучающих данных!

3. Обучение модели и настройка параметров

Давайте обучим базовую модель RNN. Здесь мы используем два уровня RNN по 64 единицы в каждом. Обратите внимание, что размер последнего слоя набора данных такой же, как размер нашей выходной переменной, то есть 1. В коде я вызываю функцию LearningRateScheduler, которая изменяет скорость обучения в зависимости от номера эпохи.

Давайте посмотрим, как выглядит график зависимости скорости обучения от потерь, чтобы мы могли выбрать оптимальную скорость обучения.

Теперь, выбрав значение скорости обучения, при котором график выглядит стабильным, мы снова обучаем модель. Здесь я выбираю 3x10–3.

Давайте напишем код, чтобы увидеть, как будет развиваться наша потеря!

Мы можем построить график и увидеть, как при оптимальной скорости обучения наши потери уменьшаются.

4. Прогноз

Используйте серию тестов, чтобы предсказать и протестировать модель.

Поздравляю! Вы успешно построили и оценили свою первую модель RNN.

Теперь вы должны попробовать это на одном из реальных наборов данных, например, Данные о солнечных вспышках, и посмотреть, сможете ли вы предсказать, используя аналогичную модель, которую я использовал в этой статье. Удачи!