Obsługa sekwencji w PyTorch

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Michal Oleszak

Machine Learning Engineer

Dane sekwencyjne

  • Uporządkowane w czasie lub przestrzeni
  • Kolejność punktów danych zawiera zależności między nimi
  • Przykłady danych sekwencyjnych:
    • Szeregi czasowe
    • Tekst
    • Fale dźwiękowe

Szereg czasowy wyświetlony na ekranie komputera.

Otwarta książka.

Zestaw głośników i ekran komputera z oprogramowaniem do przetwarzania dźwięku.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Prognozowanie zużycia energii

  • Zadanie: prognozowanie przyszłego zużycia energii na podstawie przeszłych wzorców

  • Zbiór danych o zużyciu energii:

                 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.
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Podział na zbiór treningowy i testowy

  • Bez losowego podziału dla szeregów czasowych!
  • Błąd wyprzedzenia: model ma dostęp do informacji z przyszłości
  • Rozwiązanie: podział według czasu

Wizualnie wydzielony zbiór treningowy za lata 2011–2013 w kolorze niebieskim i zbiór testowy za rok 2014 w kolorze pomarańczowym.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Tworzenie sekwencji

  • Długość sekwencji = liczba punktów danych w jednym przykładzie treningowym
    • 24 × 4 = 96 -> uwzględnia ostatnie 24 godziny
  • Prognozowanie pojedynczego kolejnego punktu danych

Wizualnie wydzielone sekwencje wejściowe równej długości w kolorze niebieskim i wartość docelowa w kolorze zielonym.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Tworzenie sekwencji w Pythonie

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)
  • Przyjmuje dane i długość sekwencji jako wejście
  • Inicjalizuje listy wejść i celów
  • Iteruje po punktach danych
  • Definiuje wejścia i cel
  • Dołącza do zainicjalizowanych list
  • Zwraca wejścia i cele jako tablice NumPy
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

TensorDataset

Tworzenie przykładów treningowych

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

Konwersja do zbioru danych Torch

from torch.utils.data import TensorDataset

dataset_train = TensorDataset(
    torch.from_numpy(X_train).float(),
    torch.from_numpy(y_train).float(),
)
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Zastosowanie do innych danych sekwencyjnych

Te same techniki mają zastosowanie do innych sekwencji:

  • Duże modele językowe
  • Rozpoznawanie mowy
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Lass uns üben!

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Preparing Video For Download...