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中,关于model.eval()和torch.no_grad()

    一直对于model.eval()和torch.no_grad()有些疑惑 之前看博客说,只用torch.no_grad()即可 但是今天查资料,发现不是这样,而是两者都用,因为两者有着不同的作用 引用stackoverflow: Use both. They do different things, and have different scopes.wit…

    PyTorch 2023年4月8日
    00
  • Pytorch dataset自定义【直播】2019 年县域农业大脑AI挑战赛—数据准备(二),Dataset定义

    在我的torchvision库里介绍的博文(https://www.cnblogs.com/yjphhw/p/9773333.html)里说了对pytorch的dataset的定义方式。 本文相当于实现一个自定义的数据集,而这正是我们在做自己工程所需要的,我们总是用自己的数据嘛。 继承 from torch.utils.data import Dataset…

    2023年4月6日
    00
  • pytorch 不同版本对应的cuda

    参考官网: https://pytorch.org/get-started/previous-versions/   查看cuda版本:cat /usr/local/cuda/version.txt  torch、torchvision、cuda 、python对应版本匹配         参考链接:https://www.zhihu.com/questio…

    2023年4月8日
    00
  • pytorch自定义不可导激活函数的操作

    在PyTorch中,我们可以使用自定义函数来实现不可导的激活函数。以下是实现自定义不可导激活函数的完整攻略: 步骤1:定义自定义函数 首先,我们需要定义自定义函数。在这个例子中,我们将使用ReLU函数的变体,称为LeakyReLU函数。LeakyReLU函数在输入小于0时不是完全不可导的,而是有一个小的斜率。以下是LeakyReLU函数的定义: import…

    PyTorch 2023年5月15日
    00
  • PyTorch加载数据集梯度下降优化

    在PyTorch中,加载数据集并使用梯度下降优化算法进行训练是深度学习开发的基本任务之一。本文将介绍如何使用PyTorch加载数据集并使用梯度下降优化算法进行训练,并演示两个示例。 加载数据集 在PyTorch中,可以使用torch.utils.data.Dataset和torch.utils.data.DataLoader类来加载数据集。torch.uti…

    PyTorch 2023年5月15日
    00
  • Tensorflow实现将标签变为one-hot形式

    将标签变为one-hot形式是深度学习中常用的数据预处理方法之一。在Tensorflow中,我们可以使用tf.one_hot函数将标签变为one-hot形式。本文将提供详细的攻略,包括使用tf.one_hot函数将标签变为one-hot形式的步骤和两个示例说明。 将标签变为one-hot形式的步骤 要将标签变为one-hot形式,我们可以使用以下步骤: 导入…

    PyTorch 2023年5月15日
    00
  • Pytorch Tensor基本数学运算详解

    PyTorch Tensor是PyTorch中最基本的数据结构,支持各种数学运算。本文将详细讲解PyTorch Tensor的基本数学运算,包括加减乘除、矩阵乘法、广播、取整、取模等操作,并提供两个示例说明。 1. 加减乘除 PyTorch Tensor支持加减乘除等基本数学运算。以下是一个示例代码,展示了如何使用PyTorch Tensor进行加减乘除运算…

    PyTorch 2023年5月15日
    00
  • Pytorch下 label 的 one-hot 形式转换方法

    2020.10.1 发现最新的 pytorch 已经原生支持 one-hot 操作torch.nn.functional.one_hot()pytorch 官方文档链接 只需如下一行代码:label_one_hot = torch.nn.functional.one_hot(labels, self.num_classes).float().to(self.…

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