用 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 深度学习进阶

Passons à la pratique !

PyTorch 深度学习进阶

Preparing Video For Download...