一、项目简介
在原风速预测的项目基础上,本项目进行了多特征输入的的风速预测(使用了数据集中的8个特征作为输入),使用的网络仍是一维卷积网络。
二、实验数据
实验使用了风速预测数据集wind_dataset.csv中"WIND","IND","RAIN","IND.1","T.MAX","IND.2","T.MIN","T.MIN.G"的八个特征进行风速预测。滑窗的步长为20,即前20天的8个特征(共8×20个数据)来预测第21天的风速。
三、网络运行过程
网络的input_shape=[64, 8, 20](其中64是batch_size, 8是输入的特征,20是滑窗步长即取20天的数据),网络的结构和输出如下图所示。第一个卷积输出的通道数为10,第二个卷积输出通道数为20,第三个是30,最后用linear层输出一个预测风速的结果。(卷积核的大小均为3)
四、多特征的一维卷积网络运行的原理和过程
我们很容易理解,一维数据进行一维卷积,就是用一个一个如1×3的卷积核对一维数据进行滑动卷积。那么本项目中输入的是8维的数据特征,输入假设为[8, 20],假设卷积通道为1,步长为1就会有8个同一类的卷积核对8个维度特征数据分别进行卷积,然后对8个维度卷积后的特征进行叠加,输出为[1,18]。如果通道数为10,就有10个不同类的卷积核进行上述的操作,则输出[10, 18]。下面是我自己对这个计算的理解(如有不对敬请指出,互相学习)
每次卷积的计算过程,以通道1的计算为例子,假设步长是1,如图:
以上理解是本人对一维卷积的理解,不一定准确,欢迎互相交流。
五、项目运行环境
window11+python3.9+pytorch1.31.1
六、项目文件及运行说明
train.py 里面是训练过程的通用代码,其他项目也可以在它的基础上修改 Config.py 里面是项目所需要用到的参数 DataSplit.py 实现数据划分的函数 model.py 训练的模型配置 wind_dataset.csv 风速预测的数据集 test_wind_CNN.py 运行文件,配置好训练的参数,进行训练并在里面绘图 loss.csv训练过程产生的损失 loss_draw.py 根据训练输出的loss.csv文件绘制loss损失 cnn.pth 是训练过程中生成的模型参数,可用于做测试数据的预测 test_pth.py 根据生成的cnn.pth模型参数对测试数据进行预测
七、部分模型代码展示
八、预测效果展示
训练epoch=200的loss曲线:
训练epoch=200的训练集预测效果:
训练epoch=200的验证集预测效果:
八、总结与资源
若有朋友需要源码,可以关注【科研小条】公众号,回复【多特征风速预测】,即可获得。