一、项目简介
本项目是基于PyTorch深度学习框架实现一个一维卷积网络来进行风速预测的项目,网络的输入是风速(单特征),用前50天的风速(WIND)输出是预测后5天风速,适用于单特征多步长(多输出)的预测问题。。【本项目的代码文件分模块整理,包含模型构建、数据划分、训练过程等模块都清晰分明】
二、实验数据集及实验说明
采用的是wind_dataset.csv,数据集时间、风速、降雨量等等参数,本项目采用前50天的风速WIND特征来预测未来5天的风速。图中的数据划分:以滑窗的方式进行数据划分,滑窗大小为20(实验用的是50),输入特征为1,输入序列大小为20(实验中为50),输出为5,每次滑窗的第后5天的风速值为预测的标签值。数据展示如下:
三、实验环境
平台:Window 11;语言:python3.9;编译器:Pycharm;框架:Pytorch:1.13.1
四、实验内容及部分代码展示
1、1DCNN模型构建
model.py定义了项目用到的网络模型,本项目用到的模型是三层的一维卷积网络、relu激活函数、两层全连接层进行输出5天的风速预测结果。
2、train.py 训练通用模板
训练过程集成到fit函数里面,包含测试集训练过程和验证集计算过程,是项目训练过程的通用代码,其他项目也可以在它的基础上修改后使用。
3、Config.py 参数定义
config中定义了项目的基本参数,可以在里面修改训练参数。
4、train_wind_CNN.py 训练文件
该py文件实现整体训练流程并做绘图操作。依次实现加载数据、数据标准化、样本和标签制作、划分训练集测试集、数据转化为Tensor、形成数据更迭器、载入模型、定义损失、定义优化器、开始训练、损失可视化、显示预测结果。
5、test_pth.py 模型训练后的测试文件
采用模型训练完成后产生的的pth参数文件对测试数据进行预测,可以展示模型预测效果,本项目还是用训练的数据作为该文件的测试数据,前面的处理过程类似test_WIND_CNN.py所示。
6、loss_draw.py 模型训练后的loss绘图
将训练后产生并收集的loss.csv展示出来,也就是损失图,红框可调展示范围
7、predict_plot_pth.py 预测后5天的数值并可视化
用某前50天风速数据预测后5天风速并绘图和可视化具体的数值
五、实验结果及分析
1、训练过程
这是训练过程中的可视化,会输出train_loss和test_loss
2、loss损失图
该损失是训练了200个epoch的损失图:(由于测试集过拟合严重我就加了Dropout层,过拟合现象好多了。
3、预测效果展示(预测图)
训练epoch=200后的风速预测效果train如下,展示前两百天的预测效果::
训练epoch=200后的风速预测效果如下(使用pth参数文件进行测试预测),展示前两百天的预测效果):
4、预测效果展示(预测具体的某50天)
使用如下图所示的前50天风速,预测后5天的风速值
下图中黑色为历史50天风速,垂直红色是预测开始的地方,绿色是真实值,蓝色是预测值
六、总结及资源
若有朋友需要可运行的源码和数据集,可以guan注【科研小条】gong众号,回复【单特征多步风速预测】,即可获得。