Скачать книгу

= [series[i:i+n_steps] for i in range(n_samples)]

      y = series[n_steps:]

      X = np.array(X).reshape(-1, n_steps, 1)

      y = np.array(y)

      # Создаем модель RNN

      model = Sequential()

      model.add(SimpleRNN(10, activation="relu", input_shape=[n_steps, 1]))

      model.add(Dense(1))

      # Компилируем модель

      model.compile(optimizer="adam", loss="mse")

      # Обучаем модель

      model.fit(X, y, epochs=10)

      # Делаем прогноз на будущее

      future_steps = 10

      future_x = X[-1, :, :]

      future_predictions = []

      for _ in range(future_steps):

      future_pred = model.predict(future_x.reshape(1, n_steps, 1))

      future_predictions.append(future_pred[0, 0])

      future_x = np.roll(future_x, shift=-1)

      future_x[-1] = future_pred[0, 0]

      # Выводим результаты

      import matplotlib.pyplot as plt

      plt.plot(np.arange(n_steps), X[-1, :, 0], label="Исходные данные")

      plt.plot(np.arange(n_steps, n_steps+future_steps), future_predictions, label="Прогноз")

      plt.xlabel("Временной шаг")

      plt.ylabel("Значение")

      plt.legend()

      plt.show()

      ```

      В этом примере:

      – Мы создаем простую RNN с одним слоем, который прогнозирует следующее значение временного ряда на основе предыдущих значений.

      – Обучаем модель с использованием оптимизатора "adam" и функции потерь "mse" (Mean Squared Error).

      – Затем делаем прогнозы на несколько временных шагов вперед, обновляя входные данные с учетом предсказанных значений.

      На результате кода, который вы предоставили, мы видим следующее:

      1. Исходные данные (синяя линия): Это начальная часть временного ряда, который был сгенерирован. В данном случае, это линейная функция (0.1 * time) с добавленными синусоидальными колебаниями (np.sin(time)).

      2. Прогноз (оранжевая линия): Это результаты прогноза, сделанные моделью RNN на будущее. Модель обучается на исходных данных и затем пытается предсказать значения временного ряда на заданное количество временных шагов вперед (future_steps).

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

      Завершив обучение и сделав прогнозы, вы можете визуально оценить, насколько хорошо модель справилась с задачей прогнозирования временного ряда.

      В этом примере обучаемые параметры модели – это веса и смещения в слое RNN и в слое Dense. Модель настраивает эти параметры в процессе обучения, чтобы минимизировать ошибку прогноза временного ряда.

      Обучаемые параметры позволяют модели адаптироваться к данным и находить закономерности, что делает их мощным инструментом для разнообразных задач машинного обучения.

      Однако RNN имеют несколько ограничений, из которых наиболее значимой является проблема затухания градиентов (vanishing gradients). Эта проблема заключается в том, что при обучении RNN градиенты (производные функции потерь по параметрам сети) могут становиться очень маленькими, особенно на длинных последовательностях. Это затрудняет обучение, поскольку сеть может "забывать" информацию о давно прошедших событиях в последовательности.

      Для решения проблемы затухания градиентов были разработаны более продвинутые архитектуры RNN:

      Long Short-Term Memory (LSTM):

      Long Short-Term Memory (LSTM) – это одна из наиболее популярных архитектур в области рекуррентных нейронных сетей (RNN). Она разработана для работы с последовательными данными и способна эффективно

Скачать книгу