Нейросети. Обработка естественного языка
Шрифт:
```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 на будущее. Модель пытается предсказать значения временного ряда
Из этой визуализации видно, что модель LSTM смогла захватить основные характеристики синусоидального временного ряда и предсказать его продолжение на будущее. Этот пример демонстрирует, как LSTM может использоваться для анализа и прогнозирования временных рядов, а также как она учитывает долгосрочные зависимости в данных.
2. Gated Recurrent Unit (GRU):
GRU (Gated Recurrent Unit) – это архитектура рекуррентных нейронных сетей (RNN), которая, как вы сказали, является более легкой и вычислительно эффективной по сравнению с LSTM (Long Short-Term Memory). GRU была разработана для решения проблемы затухания градиентов, которая является одной из основных проблем при обучении RNN.
Вот основные характеристики GRU:
1. Воротные механизмы (Gating Mechanisms): GRU также использует воротные механизмы, как LSTM, но в упрощенной форме. У нее есть два ворота – ворот восстановления (Reset Gate) и ворот обновления (Update Gate).
2. Ворот восстановления (Reset Gate): Этот ворот решает, какую информацию из предыдущего состояния следует забыть. Если сброс (reset) равен 1, то модель забывает всю информацию. Если сброс равен 0, то вся информация сохраняется.
3. Ворот обновления (Update Gate): Этот ворот определяет, какая информация из нового входа следует использовать. Если значение ворота обновления близко к 1, то новая информация будет использоваться практически полностью. Если близко к 0, то новая информация будет игнорироваться.
4. Скрытое состояние (Hidden State): GRU также имеет скрытое состояние, которое передается от одного временного шага к другому. Однако, в отличие от LSTM, GRU не имеет ячейки памяти, что делает ее более легкой.
5. Затухание градиентов: GRU спроектирована так, чтобы бороться с проблемой затухания градиентов, которая может возникнуть при обучении глубоких RNN. Благодаря воротным механизмам, GRU может регулировать поток информации и избегать слишком быстрого затухания или взрывного увеличения градиентов.
6. Применение: GRU часто применяется в задачах анализа текста, временных рядов и других последовательных данных. Она обеспечивает хорошее соотношение между производительностью и сложностью модели, что делает ее популярным выбором во многих приложениях.
Главное преимущество GRU перед LSTM заключается в более низкой сложности и меньшем количестве параметров, что может быть важно при работе с ограниченными вычислительными ресурсами. Однако, стоит отметить, что LSTM всё равно остается более мощным в решении некоторых сложных задач, требующих учета долгосрочных зависимостей.