Обработка последовательностей с PyTorch

Глубокое обучение на PyTorch: средний уровень

Michal Oleszak

Machine Learning Engineer

Последовательные данные

  • Упорядочены во времени или в пространстве
  • Порядок точек данных отражает зависимости между ними
  • Примеры последовательных данных:
    • Временные ряды
    • Текст
    • Звуковые волны

Временной ряд на экране компьютера.

Раскрытая книга.

Набор громкоговорителей и экран компьютера с открытым ПО для обработки звука.

Глубокое обучение на PyTorch: средний уровень

Прогнозирование потребления электроэнергии

  • Задача: предсказать будущее потребление электроэнергии на основе прошлых паттернов

  • Набор данных о потреблении электроэнергии:

                 timestamp  consumption
0      2011-01-01 00:15:00    -0.704319
1      2011-01-01 00:30:00    -0.704319
...                    ...          ...
140254 2014-12-31 23:45:00    -0.095751
140255 2015-01-01 00:00:00    -0.095751
1 Trindade, Artur. (2015). ElectricityLoadDiagrams20112014. UCI Machine Learning Repository. https://doi.org/10.24432/C58C86.
Глубокое обучение на PyTorch: средний уровень

Разбиение на обучающую и тестовую выборки

  • Случайное разбиение для временных рядов недопустимо!
  • Утечка данных из будущего: модель получает информацию о будущем
  • Решение: разбиение по времени

Обучающая выборка за 2011–2013 гг. выделена синим, тестовая выборка за 2014 г. — оранжевым.

Глубокое обучение на PyTorch: средний уровень

Создание последовательностей

  • Длина последовательности = количество точек данных в одном обучающем примере
    • 24 × 4 = 96 → рассматриваем последние 24 часа
  • Предсказываем одну следующую точку данных

Входные последовательности одинаковой длины выделены синим, целевое значение — зелёным.

Глубокое обучение на PyTorch: средний уровень

Создание последовательностей на Python

import numpy as np

def create_sequences(df, seq_length):

xs, ys = [], []
for i in range(len(df) - seq_length):
x = df.iloc[i:(i+seq_length), 1] y = df.iloc[i+seq_length, 1]
xs.append(x) ys.append(y)
return np.array(xs), np.array(ys)
  • Принимает данные и длину последовательности
  • Инициализирует списки входов и целевых значений
  • Итерируется по точкам данных
  • Определяет входы и целевое значение
  • Добавляет в предварительно созданные списки
  • Возвращает входы и цели как массивы NumPy
Глубокое обучение на PyTorch: средний уровень

TensorDataset

Создание обучающих примеров

X_train, y_train = create_sequences(train_data, seq_length)
print(X_train.shape, y_train.shape)
(34944, 96) (34944,)

Преобразование в Torch Dataset

from torch.utils.data import TensorDataset

dataset_train = TensorDataset(
    torch.from_numpy(X_train).float(),
    torch.from_numpy(y_train).float(),
)
Глубокое обучение на PyTorch: средний уровень

Применимость к другим последовательным данным

Те же подходы применимы к другим последовательностям:

  • Большие языковые модели
  • Распознавание речи
Глубокое обучение на PyTorch: средний уровень

Давайте потренируемся!

Глубокое обучение на PyTorch: средний уровень

Preparing Video For Download...