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による中級ディープラーニング

シーケンスの作成

  • シーケンス長 = 1訓練サンプルのデータポイント数
    • 24 × 4 = 96 → 過去24時間を考慮
  • 次の1データポイントを予測する

等長の入力シーケンス(青)とターゲット値(緑)を視覚的に分けて表示。

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データセットに変換する

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...