PyTorchで時間系列データタスクをどのように処理するのか?

通常,在PyTorch中处理时间序列数据任务需要使用torch.nn.RNN、torch.nn.LSTM、torch.nn.GRUなどの再帰ニューラルネットワークモジュールと、torch.utils.data.Datasetやtorch.utils.data.DataLoaderなどのデータローディングツールを使用します。

以下は、PyTorchを使用して時間系列データタスクを処理する方法を示す簡単な例です。

  1. データセット
import torch
from torch.utils.data import Dataset

class TimeSeriesDataset(Dataset):
    def __init__(self, data):
        self.data = data
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        return self.data[idx]
  1. RNNを含むモデルを定義する。
import torch.nn as nn

class RNNModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super(RNNModel, self).__init__()
        self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)
    
    def forward(self, x):
        out, _ = self.rnn(x)
        out = self.fc(out[:, -1, :])
        return out
  1. データを準備してモデルをトレーニングする。
# 定义超参数
input_size = 1
hidden_size = 64
num_layers = 1
output_size = 1
num_epochs = 100
learning_rate = 0.001

# 准备数据
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dataset = TimeSeriesDataset(data)
dataloader = DataLoader(dataset, batch_size=1, shuffle=True)

# 初始化模型
model = RNNModel(input_size, hidden_size, num_layers, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# 训练模型
for epoch in range(num_epochs):
    for i, batch in enumerate(dataloader):
        inputs = batch.float().unsqueeze(2)
        targets = inputs.clone()
        
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if (i+1) % 10 == 0:
            print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, len(dataloader), loss.item()))

上記の例では、まず、時系列データをロードするためのカスタムDatasetクラスを作成し、RNNを含むRNNModelモデルを定義し、最後にデータを準備してモデルを訓練しました。訓練の過程で、モデルを最適化するために平均二乗誤差損失関数とAdamオプティマイザを使用しました。

bannerAds