基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)

 一、项目简介

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

二、数据集

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第1张图片

 三、我的实验环境

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

四、实验内容及文件说明

1、model.py

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第2张图片

 2、Config.py 参数合集

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

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

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第3张图片

 4、DataSplit.py 数据划分

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第4张图片

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

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第5张图片

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第6张图片

6、test_pth.py 训练文件

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第7张图片

7、loss_draw.py 训练文件

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第8张图片

  五、实验结果

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第9张图片


 

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

基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第10张图片

 基于pytorch使用LSTM和多头Attention风速预测项目实战(单特征)_第11张图片

 六、总结及资源

此篇作为毕设笔记记录下来,若有朋友需要源码,可以关注OurTwenty公众号,回复【风速预测LA】,即可获得。

你可能感兴趣的:(深度学习,神经网络,pytorch)