CNN(一维卷积Conv1D)实现时间序列预测(PyTorch版)

目录

一、基于PyTorch搭建CNN(一维卷积Conv1D)模型实现风速时间序列预测

二、配置类

三、时序数据集的制作

四、数据归一化

五、数据集加载器

六、搭建CNN(一维卷积Conv1D)模型

七、定义模型、损失函数、优化器

八、模型训练

九、可视化结果

完整源码


一、基于PyTorch搭建CNN(一维卷积Conv1D)模型实现风速时间序列预测

本专栏前面几篇文章讲解的都是基于RNN类网络(LSTM、GRU等)进行时间序列预测,因为RNN类网络天生固有特性就是可以提取时间层面的信息,如果有熟悉NLP的小伙伴可能了解使用卷积也可以处理序列信息。

在NLP领域有个经典的文本分类算法 textCNN 就是使用了卷积结构来处理文本序列数据,对于文本数据和时间序列数据格式类似,所以本篇文章尝试使用CNN卷积结构来进行时间序列预测。

如果熟悉PyTorch的小伙伴,在搭建卷积网络的时候可能会看到两种卷积模块,分别是 Conv1D 和 Conv2D,对于图像类任务我们常常使用的是二维卷积,对于序列类数据我们使用的就是 Conv1D 一维卷积,对于本篇卷积模型我们使用的是 Conv1D 一维卷积,其实也可以将图像任务中的二维卷积拿来用,对于这种情况我们下篇文章进行讲解如何使用二维卷积 Conv2D 处理时间序列数据。

二、配置类

下面是本项目需要使用的参数以及相关变量,为了方便我们将所有参数封装到一个类中,也可以使用 argparse 参数解析方式。

为了说明数据各个阶段的维度变化,特此定义了如下变量大小,小伙伴需要记住下面变量的值一遍理解下文说明各个阶段的维度大小。

class Config():
    data_path = '../data/wind_dataset.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您好,针对时间序列预测问题,可以使用卷神经网络(CNN)进行建模。在PyTorch中,可以使用nn.Conv1d模块来实现一维卷操作。具体步骤如下: 1. 准备数据集,将时间序列数据转换为二维张量,其中第一维表示时间步,第二维表示特征维度。 2. 定义CNN模型,可以使用多个卷层和池化层来提取特征。 3. 定义损失函数和优化器。 4. 训练模型,并在验证集上进行评估。 以下是一个简单的示例代码: ```python import torch import torch.nn as nn import torch.optim as optim # 准备数据集 x_train = torch.randn(100, 10) # 100个时间步,每个时间步有10个特征 y_train = torch.randn(100, 1) # 目标值为单个数值 # 定义CNN模型 class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1 = nn.Conv1d(in_channels=10, out_channels=16, kernel_size=3) self.pool1 = nn.MaxPool1d(kernel_size=2) self.conv2 = nn.Conv1d(in_channels=16, out_channels=32, kernel_size=3) self.pool2 = nn.MaxPool1d(kernel_size=2) self.fc = nn.Linear(in_features=32*2, out_features=1) def forward(self, x): x = x.permute(0, 2, 1) # 将特征维度放在第二维 x = self.pool1(torch.relu(self.conv1(x))) x = self.pool2(torch.relu(self.conv2(x))) x = x.view(-1, 32*2) x = self.fc(x) return x model = CNN() # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.01) # 训练模型 for epoch in range(100): optimizer.zero_grad() y_pred = model(x_train) loss = criterion(y_pred, y_train) loss.backward() optimizer.step() print('Epoch {}, Loss: {:.4f}'.format(epoch+1, loss.item())) # 在验证集上进行评估 x_val = torch.randn(10, 10) y_val = torch.randn(10, 1) y_pred = model(x_val) val_loss = criterion(y_pred, y_val) print('Validation Loss: {:.4f}'.format(val_loss.item())) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能_SYBH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值