Нейросети. Обработка естественного языка - страница 18

Шрифт
Интервал


```python

import numpy as np

import tensorflow as tf

import pandas as pd

import matplotlib.pyplot as plt

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import LSTM, Dense

# Генерируем пример временного ряда (синусоида)

timesteps = np.linspace(0, 100, 400)

series = np.sin(timesteps)

# Создаем датасет для обучения сети

df = pd.DataFrame({'timesteps': timesteps, 'series': series})

window_size = 10 # Размер окна для создания последовательных образцов

batch_size = 32 # Размер пакета

# Функция для создания последовательных образцов из временного ряда

def create_sequences(series, window_size, batch_size):

dataset = tf.data.Dataset.from_tensor_slices(series)

dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)

dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))

dataset = dataset.shuffle(1000).map(lambda window: (window[:-1], window[-1]))

dataset = dataset.batch(batch_size).prefetch(1)

return dataset

train_dataset = create_sequences(series, window_size, batch_size)

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

model = Sequential([

LSTM(50, return_sequences=True, input_shape=[None, 1]),

LSTM(50),

Dense(1)

])

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

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

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

model.fit(train_dataset, epochs=10)

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

future_timesteps = np.arange(100, 140, 1)

future_series = []

for i in range(len(future_timesteps) – window_size):

window = series[i:i + window_size]

prediction = model.predict(window[np.newaxis])

future_series.append(prediction[0, 0])

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

plt.figure(figsize=(10, 6))

plt.plot(timesteps, series, label="Исходный ряд", linewidth=2)

plt.plot(future_timesteps[:-window_size], future_series, label="Прогноз", linewidth=2)

plt.xlabel("Время")

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

plt.legend()

plt.show()

```

Этот пример демонстрирует, как можно использовать LSTM для прогнозирования временных рядов. Мы создаем модель LSTM, обучаем ее на исходном временном ряде и делаем прогнозы на будущее. Визуализация показывает, как модель способна улавливать долгосрочные зависимости в данных и строить прогнозы.

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

1. Исходный временной ряд (синяя линия): Это синусоидальная волна, которая была сгенерирована как пример временного ряда.

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