一、项目简介
本项目实现了基于二维卷积网络的多特征输入的的风速预测(使用了数据集中的8个特征作为输入),其效果明显比本人之前文章所做的一维多特征效果好。
二、二维卷积网络的优势
我们都知道二维卷积用于图片数据的处理具有非常大的优势,相比于一维卷积,二维卷积可以提取更复杂的特征,比如在风速预测项目中,一维卷积只能提取其时序特征,但是二维卷积可以同时考虑时间和空间维度上的特征,所提取的特征具有良好的时空相关性,其中空间维度特征指的是不同特征之间的相对位置关系。对于多通道数据,比如风速预测中的多特征数据,二维卷积可以同时处理不同通道的特征信息,每个通道可以被看作是输入数据的一个特征维度,二维卷积网络可以同时对多个通道进行卷积操作,从而更好地捕捉不同通道之间特征的关系。
三、实验数据
1、实验使用了风速预测数据集wind_dataset.csv中"WIND","IND","RAIN","IND.1","T.MAX","IND.2","T.MIN","T.MIN.G"的这八个特征进行风速预测。滑窗的步长为20,即前20天的8个特征(每份共8×20个数据)来预测第21天的风速。【数据集中的【NA】空值被置为0。】
2、图中红色框核箭头是卷积的示意图,红色框是本项目使用的卷积核大小为3×3,箭头是卷积的方向,步长默认为1,padding为1。
四、实验环境
平台:window11
语言:python3.9
编译器:Pycharm
Pytorch:1.13.1
网络运行过程
模型代码如下,该模型加入了Dropout层用于防止过拟合,但是最后的结果还是有些过拟合,但是不影响模型效果。【本人尝试了去掉dropout层似乎效果更好,有兴趣的同学可以去掉跑一下看看】。模型使用了三层卷积和两个全连接层,模型流程如图所示:
该模型的计算过程和参数如下所示:
其他数据集划分等代码可以参考之前写的一篇文章(1DCNN单特征风速预测),基础代码都大同小异,在输入特征维度上有所改变。
五、项目运行环境
window11+python3.9+pytorch1.31.1
六、项目文件及运行说明
train.py 里面是训练过程的通用代码,其他项目也可以在它的基础上修改
Config.py 里面是项目所需要用到的参数
DataSplit.py 实现数据划分的函数
model_2DCNN.py 训练的模型配置
wind_dataset.csv 风速预测的数据集
test_wind_2DCNN.py 运行文件,配置好训练的参数,进行训练并在里面绘图
loss.csv训练过程产生的损失
loss_draw.py 根据训练输出的loss.csv文件绘制loss损失
cnn.pth 是训练过程中生成的模型参数,可用于做测试数据的预测
test_pth.py 根据生成的cnn.pth模型参数对测试数据进行预测
*.png文件是预测结果可视化
七、部分模型代码展示
八、预测效果展示
代码实现功能,实现风速预测、独立保存loss参数、独立绘制loss曲线、风速测试集独立预测等功能,详细操作见上述文件说明。以下是模型的训练过程和效果展示。
以下是加入了dropout层的效果:
1、训练epoch=100产生的loss参数储存到loss_csv文件中
2、训练epoch=100的loss曲线:
3、训练epoch=100的训练集风速预测曲线(前两百个数据点):
4、 训练epoch=100的测试集风速预测曲线(前两百个数据点):
以下是没有加入dropout层的效果:
1、训练epoch=100的loss曲线:
2、训练epoch=100的训练集风速预测曲线(前两百个数据点):
3、训练epoch=100的测试集风速预测曲线(前两百个数据点):
九、总结与资源
若有朋友需要源码,可以关zhu【科研小条】gong众号,回复【多特征二维卷积风速预测】,即可获得。