一、项目简介

在上一个使用一维卷积CNN进行风速预测的项目基础上,本项目基于Pytorch使用LSTM和多头Attention实现时间序列(风速)的预测,只使用风速一个特征来预测风速,适用于初学预测的小伙伴。项目参考了多个网络上的代码以及借助了chatgpt的灵感,对整个项目分解到各个py文件中形成一个完整项目的基本框架,其他类似项目可以用这个框架进行修改,增加了loss计算和相应的绘图模块,还增加了对pth文件的使用实现测试数据的预测。

二、数据集

采用的是wind_dataset.csv,数据集时间、风速、降雨量等等参数,本项目只采用风速特征来预测未来一天的风速,即WIND这一列。数据展示如下

Linear Attention pytorch实现 pytorch multi head attention_pytorch

 三、我的实验环境


平台:window11 语言:python3.9 编译器:Pycharm Pytorch:1.13.1+cu116


四、实验内容及文件说明

1、model.py

model.py定义了项目的网络模型,本项目用到的模型是LSTM和torch中的MultiheadAttention,两者结合形成预测网络,使用relu激活,全连接层输出预测结果。

Linear Attention pytorch实现 pytorch multi head attention_pytorch_02

 2、Config.py 参数合集

 Config.py文件定义了项目所需要用到的所有参数,把这些参数统一整合到一个文件中,实现参数的统一管理。

 3、train.py 训练过程的通用代码


train.py是项目训练过程的通用代码,其他项目也可以在它的基础上修改后使用。


Linear Attention pytorch实现 pytorch multi head attention_数据集_03

 4、DataSplit.py 数据划分


DataSplit.py 是实现数据划分的函数,通过滑动窗口,将每个timestep大小的数据作为训练数据,将其后面一个数据作为预测结果,再进行划分训练数据和标签,最后分成训练集和验证集


Linear Attention pytorch实现 pytorch multi head attention_数据_04

5、test_wind_run.py 运行的训练文件

该py文件实现整体训练流程并做绘图操作。依次实现加载数据、数据标准化、取出WIND数据、划分训练集测试集、数据转化为Tensor、形成数据更迭器、载入模型、定义损失、定义优化器、开始训练、损失可视化、显示预测结果。

Linear Attention pytorch实现 pytorch multi head attention_神经网络_05

Linear Attention pytorch实现 pytorch multi head attention_pytorch_06

6、test_pth.py 训练文件

载入训练好的pth模型参数进行数据预测。

Linear Attention pytorch实现 pytorch multi head attention_数据集_07

7、loss_draw.py 训练文件

利用训练过程储存的loss.csv数据进行loss绘图

Linear Attention pytorch实现 pytorch multi head attention_神经网络_08

  五、实验结果

以下实验结果展示的是epochs=200的训练过程,训练完成后输出损失对比如图所示。有一段是断崖式下跌,我百度了一下,其中有一个解释是学习率调整突破了局部最优

Linear Attention pytorch实现 pytorch multi head attention_深度学习_09


 

 选取部分数据进行预测展示,其中蓝色是预测的数据,红色的实际的,感觉预测效果和一维卷积CNN差不多,可能是一些参数没有调好。第一张图是训练数据的预测效果,第二张图是测试集的训练效果。可以看出来,一些极端值的预测效果不太好。

Linear Attention pytorch实现 pytorch multi head attention_数据集_10

 

Linear Attention pytorch实现 pytorch multi head attention_深度学习_11