PyTorch+LSTM实现单变量时间序列预测

以下是“PyTorch+LSTM实现单变量时间序列预测”的完整攻略,包含两个示例说明。

示例1:准备数据

步骤1:导入库

我们首先需要导入必要的库,包括PyTorch、numpy和matplotlib。

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

步骤2:生成数据

我们可以使用numpy库生成一些随机数据来模拟时间序列数据。在这个示例中,我们生成了一个包含100个数据点的时间序列。

np.random.seed(0)
data = np.sin(np.arange(0, 10, 0.1))

步骤3:划分数据集

我们将数据集划分为训练集和测试集。在这个示例中,我们将前80个数据点用于训练,后20个数据点用于测试。

train_data = data[:80]
test_data = data[80:]

步骤4:生成训练数据

我们需要将训练数据转换为模型可以处理的格式。在这个示例中,我们将使用前10个数据点来预测第11个数据点。我们将使用一个滑动窗口来生成训练数据。

def create_sequences(data, seq_length):
    xs = []
    ys = []

    for i in range(len(data)-seq_length-1):
        x = data[i:(i+seq_length)]
        y = data[i+seq_length]
        xs.append(x)
        ys.append(y)

    return np.array(xs), np.array(ys)

seq_length = 10
X_train, y_train = create_sequences(train_data, seq_length)
X_test, y_test = create_sequences(test_data, seq_length)

在这个示例中,我们定义了一个函数create_sequences,该函数将数据转换为模型可以处理的格式。我们使用一个滑动窗口来生成训练数据,其中每个训练样本包含前10个数据点和第11个数据点作为标签。

示例2:构建模型

步骤1:定义模型

我们将使用一个LSTM模型来预测时间序列数据。在这个示例中,我们定义了一个包含一个LSTM层和一个全连接层的模型。

class LSTM(nn.Module):
    def __init__(self, input_size=1, hidden_size=50, output_size=1):
        super().__init__()
        self.hidden_size = hidden_size

        self.lstm = nn.LSTM(input_size, hidden_size)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        h0 = torch.zeros(1, x.size(1), self.hidden_size)
        c0 = torch.zeros(1, x.size(1), self.hidden_size)

        out, _ = self.lstm(x, (h0, c0))
        out = self.fc(out[-1, :, :])

        return out

在这个示例中,我们定义了一个名为LSTM的类,该类继承自nn.Module。我们在__init__函数中定义了一个LSTM层和一个全连接层。在forward函数中,我们将输入数据传递给LSTM层,并将最后一个时间步的输出传递给全连接层。

步骤2:训练模型

我们将使用均方误差损失函数和随机梯度下降优化器来训练模型。在这个示例中,我们将模型训练10个周期。

model = LSTM()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

epochs = 10
for epoch in range(epochs):
    optimizer.zero_grad()

    inputs = torch.from_numpy(X_train).float().unsqueeze(2)
    targets = torch.from_numpy(y_train).float()

    outputs = model(inputs)

    loss = criterion(outputs, targets)
    loss.backward()

    optimizer.step()

    print('Epoch {}/{} - Loss: {:.4f}'.format(epoch+1, epochs, loss.item()))

在这个示例中,我们首先定义了一个LSTM模型、均方误差损失函数和随机梯度下降优化器。然后,我们将训练数据转换为PyTorch张量,并将其传递给模型。我们计算模型的输出和损失,并使用反向传播算法更新模型的参数。最后,我们打印出每个周期的损失。

步骤3:测试模型

我们可以使用训练好的模型来预测测试数据。在这个示例中,我们将使用前10个数据点来预测第11个数据点。

inputs = torch.from_numpy(X_test).float().unsqueeze(2)
targets = torch.from_numpy(y_test).float()

outputs = model(inputs)

plt.plot(y_test, label='True')
plt.plot(outputs.detach().numpy(), label='Predicted')
plt.legend()
plt.show()

在这个示例中,我们将测试数据转换为PyTorch张量,并将其传递给模型。我们计算模型的输出,并将真实值和预测值绘制在图表中。

总结

本文介绍了如何使用PyTorch和LSTM模型来预测单变量时间序列数据,并提供了两个示例说明。在实现过程中,我们使用了PyTorch和其他一些库来生成数据、构建模型、训练模型和测试模型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch+LSTM实现单变量时间序列预测 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • pytorch中的math operation: torch.bmm()

    torch.bmm(batch1, batch2, out=None) → Tensor Performs a batch matrix-matrix product of matrices stored in batch1 and batch2. batch1 and batch2 must be 3-D tensors each containing t…

    PyTorch 2023年4月8日
    00
  • PyTorch一小时掌握之autograd机制篇

    PyTorch一小时掌握之autograd机制篇 在本文中,我们将介绍PyTorch的autograd机制,这是PyTorch的一个重要特性,用于自动计算梯度。本文将包含两个示例说明。 autograd机制的基本概念 在PyTorch中,autograd机制是用于自动计算梯度的核心功能。它可以根据输入和计算图自动计算梯度,并将梯度存储在张量的.grad属性中…

    PyTorch 2023年5月15日
    00
  • Pytorch出现 raise NotImplementedError

    ————————————————————————— NotImplementedError Traceback (most recent call last) <ipython-input-32-aa392119100c> in <modul…

    PyTorch 2023年4月6日
    00
  • Pytorch学习笔记16—-CNN或LSTM模型保存与加载

    1.三个核心函数 介绍一系列关于 PyTorch 模型保存与加载的应用场景,主要包括三个核心函数: (1)torch.save 其中,应用了 Python 的 pickle 包,进行序列化,可适用于模型Models,张量Tensors,以及各种类型的字典对象的序列化保存. (2)torch.load 采用 Python 的 pickle 的 unpickli…

    PyTorch 2023年4月8日
    00
  • 使用pytorch测试单张图片(test single image with pytorch)

    以下代码实现使用pytorch测试一张图片 引用文章: https://www.learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/ from __future__ import print_function, division from PI…

    PyTorch 2023年4月7日
    00
  • pytorch hook 钩子函数的用法

    PyTorch Hook 钩子函数的用法 PyTorch中的Hook钩子函数是一种非常有用的工具,可以在模型的前向传播和反向传播过程中插入自定义的操作。本文将详细介绍PyTorch Hook钩子函数的用法,并提供两个示例说明。 什么是Hook钩子函数 在PyTorch中,每个nn.Module都有一个register_forward_hook方法和一个reg…

    PyTorch 2023年5月16日
    00
  • PyTorch 如何设置随机数种子使结果可复现

    PyTorch 如何设置随机数种子使结果可复现 在深度学习中,随机数种子的设置对于结果的可复现性非常重要。在PyTorch中,您可以通过设置随机数种子来确保结果的可复现性。本文将提供详细的攻略,以帮助您在PyTorch中设置随机数种子。 步骤一:导入必要的库 在开始设置随机数种子之前,您需要导入必要的库。您可以在Python脚本中导入以下库: import …

    PyTorch 2023年5月16日
    00
  • 在PyTorch中Tensor的查找和筛选例子

    以下是“在PyTorch中Tensor的查找和筛选例子”的完整攻略,包含两个示例说明。 示例1:查找Tensor中的最大值和最小值 步骤1:创建一个Tensor 我们首先创建一个包含随机数的Tensor: import torch x = torch.randn(3, 4) print(x) 输出: tensor([[-0.1665, -0.1285, -0…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部