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

该博客介绍了如何使用PyTorch中的二维卷积(Conv2D)来处理时间序列预测问题,尤其是风速预测。通过将时间序列数据转换为图像格式,应用卷积层进行处理。尽管这种转换可能并不理想,但作者展示了如何搭建模型、定义损失函数和优化器,并进行了模型训练和结果可视化。文章强调,二维卷积更适合处理具有空间关系的数据,而时间序列数据的特征和时间步之间并无此类关系,因此模型效果可能不佳。
摘要由CSDN通过智能技术生成

目录

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

二、配置类

三、时序数据集的制作

四、数据归一化

五、数据集加载器

六、搭建CNN(二维卷积Conv2D)模型

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

八、模型训练

九、可视化结果

完整源码


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

上一篇文章我们使用一维卷积 Conv1D 进行预测,对于本篇文章我们尝试使用图像任务常用的二维卷积 Conv2D 进行处理时序数据,对于时序类型我们可以将它转化为图像数据的格式【通道数,宽,高】。

由于这样强行转换,尽管最终能够使用二维卷积进行预测,但是违背了二维卷积提取数据的意图,所以说模型最终效果略差于 Conv1D 一维卷积,至于为什么下面我们定义模型的时候给出说明。

二、配置类

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

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

class Config():
    data_path = '../data/wind_dataset.csv'
    timestep = 20  # 时间步长,就是利用多少时间窗口
    batch_size = 3
您好,针对时间序列预测问题,可以使用卷积神经网络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())) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

人工智能_SYBH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值