目录

  • I. 数据集
  • II. 特征构造
  • III. 一维卷积
  • IV. 数据处理
    • 1.数据预处理
    • 2.数据集构造
  • V. CNN模型
    • 1.模型搭建
    • 2.模型训练
    • 3.模型预测及表现
  • VI. 源码及数据

时间序列预测系列文章:

  1. 深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)
  2. PyTorch搭建LSTM实现时间序列预测(负荷预测)
  3. PyTorch搭建LSTM实现多变量时间序列预测(负荷预测)
  4. PyTorch搭建双向LSTM实现时间序列预测(负荷预测)
  5. PyTorch搭建LSTM实现多变量多步长时间序列预测(一):直接多输出
  6. PyTorch搭建LSTM实现多变量多步长时间序列预测(二):单步滚动预测
  7. PyTorch搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
  8. PyTorch搭建LSTM实现多变量多步长时间序列预测(四):多模型滚动预测
  9. PyTorch搭建LSTM实现多变量多步长时间序列预测(五):seq2seq
  10. PyTorch中实现LSTM多步长时间序列预测的几种方法总结(负荷预测)
  11. PyTorch-LSTM时间序列预测中如何预测真正的未来值
  12. PyTorch搭建LSTM实现多变量输入多变量输出时间序列预测(多任务学习)
  13. PyTorch搭建ANN实现时间序列预测(风速预测)
  14. PyTorch搭建CNN实现时间序列预测(风速预测)
  15. PyTorch搭建CNN-LSTM混合模型实现多变量多步长时间序列预测(负荷预测)
  16. PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)
  17. PyTorch时间序列预测系列文章总结(代码使用方法)
  18. TensorFlow搭建LSTM实现时间序列预测(负荷预测)
  19. TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)
  20. TensorFlow搭建双向LSTM实现时间序列预测(负荷预测)
  21. TensorFlow搭建LSTM实现多变量多步长时间序列预测(一):直接多输出
  22. TensorFlow搭建LSTM实现多变量多步长时间序列预测(二):单步滚动预测
  23. TensorFlow搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
  24. TensorFlow搭建LSTM实现多变量多步长时间序列预测(四):多模型滚动预测
  25. TensorFlow搭建LSTM实现多变量多步长时间序列预测(五):seq2seq
  26. TensorFlow搭建LSTM实现多变量输入多变量输出时间序列预测(多任务学习)
  27. TensorFlow搭建ANN实现时间序列预测(风速预测)
  28. TensorFlow搭建CNN实现时间序列预测(风速预测)
  29. TensorFlow搭建CNN-LSTM混合模型实现多变量多步长时间序列预测(负荷预测)

I. 数据集


数据集为Barcelona某段时间内的气象数据,其中包括温度、湿度以及风速等。本文将利用CNN来对风速进行预测。

II. 特征构造

对于风速的预测,除了考虑历史风速数据外,还应该充分考虑其余气象因素的影响。因此,我们根据前24个时刻的风速+其余气象数据来预测下一时刻的风速。

III. 一维卷积

我们比较熟悉的是CNN处理图像数据时的二维卷积,此时的卷积是一种局部操作,通过一定大小的卷积核作用于局部图像区域获取图像的局部信息。图像中不同数据窗口的数据和卷积核做inner product(内积)的操作叫做卷积,其本质是提纯,即提取图像不同频段的特征。

上面这段话不是很好理解,我们举一个简单例子:

假设最左边的是一个输入图片的某一个通道,为5×55 \times55×5,中间为一个卷积核的一层,3×33 \times33×3,我们让卷积核的左上与输入的左上对齐,然后整个卷积核可以往右或者往下移动,假设每次移动一个小方格,那么卷积核实际上走过了一个3×33 \times33×3的面积,那么具体怎么卷积?比如一开始位于左上角,输入对应为(1, 1, 1;-1, 0, -3;2, 1, 1),而卷积层一直为(1, 0, 0;0, 0, 0;0, 0, -1),让二者做内积运算,即1 * 1+(-1 * 1)= 0,这个0便是结果矩阵的左上角。当卷积核扫过图中阴影部分时,相应的内积为-1,如上图所示。

因此,二维卷积是将一个特征图在width和height两个方向上进行滑动窗口操作,对应位置进行相乘求和。

相比之下,一维卷积通常用于时序预测,一维卷积则只是在width或者height方向上进行滑动窗口并相乘求和。 如下图所示:

原始时序数为:(1, 20, 15, 3, 18, 12. 4, 17),维度为8。卷积核的维度为5,卷积核为:(1, 3, 10, 3, 1)。那么将卷积核作用与上述原始数据后,数据的维度将变为:8-5+1=4。即卷积核中的五个数先和原始数据中前五个数据做卷积,然后移动,和第二个到第六个数据做卷积,以此类推。

IV. 数据处理

1.数据预处理

数据预处理阶段,主要将某些列上的文本数据转为数值型数据,同时对原始数据进行归一化处理。文本数据如下所示:

经过转换后,上述各个类别分别被赋予不同的数值,比如"sky is clear"为0,"few clouds"为1。

def load_data():df = pd.read_csv('Barcelona/Barcelona.csv')df.drop_duplicates(subset=[df.columns[0]], inplace=True)df.drop([df.columns[0], df.columns[1]], axis=1, inplace=True)# weather_mainlistType = df['weather_main'].unique()df.fillna(method='ffill', inplace=True)dic = dict.fromkeys(listType)for i in range(len(listType)):dic[listType[i]] = idf['weather_main'] = df['weather_main'].map(dic)# weather_descriptionlistType = df['weather_description'].unique()dic = dict.fromkeys(listType)for i in range(len(listType)):dic[listType[i]] = idf['weather_description'] = df['weather_description'].map(dic)# weather_iconlistType = df['weather_icon'].unique()dic = dict.fromkeys(listType)for i in range(len(listType)):dic[listType[i]] = idf['weather_icon'] = df['weather_icon'].map(dic)# print(df)return df

2.数据集构造

利用前24个小时的风速+其他变量来预测下一时刻的风速:

数据被划分为三部分:Dtr、Val以及Dte,Dtr用作训练集,Val用作验证集,Dte用作测试集,模型训练返回的是验证集上表现最优的模型。

V. CNN模型

1.模型搭建

CNN模型搭建如下:

class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.relu = nn.ReLU(inplace=True)self.conv1 = nn.Sequential(nn.Conv1d(in_channels=15, out_channels=64, kernel_size=2),  # 24 - 2 + 1 = 23nn.ReLU(),nn.MaxPool1d(kernel_size=2, stride=1),  # 23 - 2 + 1 = 22)self.conv2 = nn.Sequential(nn.Conv1d(in_channels=64, out_channels=128, kernel_size=2),  # 22 - 2 + 1 = 21nn.ReLU(),nn.MaxPool1d(kernel_size=2, stride=1),  # 21 - 2 + 1 = 20)self.Linear1 = nn.Linear(128 * 20, 50)self.Linear2 = nn.Linear(50, 1)def forward(self, x):x = self.conv1(x)x = self.conv2(x)# print(x.size())  # 15 127 20x = x.view(x.size(0), -1)# print(x.size())x = self.Linear1(x)x = self.relu(x)x = self.Linear2(x)x = x.view(x.shape[0], -1)return x

卷积层定义如下:

nn.Conv1d(in_channels=15, out_channels=64, kernel_size=2)

一维卷积的原始定义为:

nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

这里channel的概念相当于自然语言处理中的embedding,这里输入通道数为15,表示风速+14个环境变量,输出channel设置为64,卷积核大小为2。

原数数据的维度为24,即前24小时的风速+14种气象数据。卷积核大小为2,根据前文公式,原始时序数据经过卷积后维度为:

24 - 2 + 1 = 23

然后经过一个最大池化变成22,然后又是一个卷积层+池化层,变成20。

2.模型训练

一共训练5轮(太慢了):

3.模型预测及表现

CNN在Dte上的表现如下表所示:

MAE RMSE
0.39 0.55

模型训练5轮后的效果如下:

VI. 源码及数据

后面将陆续公开~

PyTorch搭建CNN实现时间序列预测(风速预测)相关推荐

  1. TensorFlow搭建CNN实现时间序列预测(风速预测)

    目录 I. 数据集 II. 特征构造 III. 一维卷积 IV. 数据处理 1. 数据预处理 2. 数据集构造 V. CNN模型 1. 模型搭建 2. 模型训练及表现 VI. 源码及数据 时间序列预测 ...

  2. 基于PyTorch搭建CNN实现视频动作分类任务代码详解

    数据及具体讲解来源: 基于PyTorch搭建CNN实现视频动作分类任务 import torch import torch.nn as nn import torchvision.transforms ...

  3. 使用PyTorch搭建CNN神经网络

    使用pytorch搭建CNN神经网络 卷积运算的基本原理 单层卷积运算 valid convolution same convolution CNN的基本结构 数据输入层 卷积层 池化层 全连接层 数 ...

  4. Pytorch搭建CNN进行图像分类

    PyTorch是一个开源的Python机器学习库,2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出.最近抽出时间来亲身实践一下用PyTorch搭建一个简单的卷积神经网络进 ...

  5. pytorch搭建cnn报错:RuntimeError: size mismatch, m1: [10 x 43264], m2: [10816 x 2] at C...

    具体报错信息: Traceback (most recent call last):File "E:/Program Files/PyCharm 2019.2/machinelearning ...

  6. CNN简单实战:PyTorch搭建CNN对猫狗图片进行分类

    在上一篇文章:CNN训练前的准备:PyTorch处理自己的图像数据(Dataset和Dataloader),大致介绍了怎么利用pytorch把猫狗图片处理成CNN需要的数据,今天就用该数据对自己定义的 ...

  7. 使用Pytorch搭建CNN模型完成食物图片分类(李宏毅视频课2020作业3,附超详细代码讲解)

    文章目录 0 前言 1 任务描述 1.1 数据描述 1.2 作业提交 1.3 数据下载 1.3.1 完整数据集 1.3.2 部分数据集 2 过程讲解 2.1 读取数据 2.2 数据预处理 2.3 模型 ...

  8. 基于PyTorch搭建CNN实现视频动作分类任务 有数据有代码 可直接运行

    目录 介绍 任务描述 数据集 运行环境 模型概述

  9. pytorch 搭建cnn resnet50网络进行图片分类 代码详解

    数据样式: 直接上代码: import pathlib import tensorflow as tf import matplotlib.pyplot as plt import os, PIL, ...

  10. TensorFlow搭建LSTM实现时间序列预测(负荷预测)

    目录 I. 前言 II. 数据处理 III. 模型 IV. 训练/测试 V. 源码及数据 I. 前言 前面已经写过不少时间序列预测的文章: 深入理解PyTorch中LSTM的输入和输出(从input输 ...

最新文章

  1. python基础实验报告答案_Python基础(上)实验报告
  2. 11.1.5 练习题
  3. springmvc + ajaxfileupload 实现异步上传文件(图片)
  4. 高级ZK:异步UI更新和后台处理–第2部分
  5. 图片鉴黄大赛上线,请开始你的表演
  6. 打开慢_苹果手机聊天回复特别慢?打开这个开关,1分钟打200字都没问题
  7. CCF201512-5 矩阵【矩阵快速幂】(募集解题代码)
  8. javar -jar 和 java -cp :命令行运行java代码
  9. php 邮件发送是html 没样式_PHP 下的 Socket 编程--发送邮件
  10. java中class文件反编译_java中的.class文件反编译
  11. SoureInsight 打开STM32的Kell 工程
  12. 尼恩Java面试宝典
  13. 数学建模竞赛经验分享(从本科生到研究生,获奖成功率100%,我从数模所学)
  14. 万网域名注册促销活动 - 阿里云域名优惠口令免费获取
  15. 面向开发的内存调试神器,如何使用ASAN检测内存泄漏、堆栈溢出等问题
  16. 新游戏《真·方块无双》发布-穿越混世过险境,运筹方块化无双
  17. 程序员,隐藏的段子手
  18. OBS Studio使用教程/工具高速下载
  19. 计算机学院心理节活动主题,计算机学院举行心理健康教育主题团体活动
  20. 滴滴在HBase性能与可用性上的探索与实践

热门文章

  1. 连续自然数之和 C++
  2. 电脑mac地址的查看的三种方式
  3. 【GamePlay】Unity手机屏幕UI适配问题
  4. java Locale类使用
  5. 鸿蒙手机如何录屏,两种方式教你如何在微信时录制屏幕视频。
  6. v2021年烷基化工艺考试题及烷基化工艺考试试卷
  7. puts与fputs的区别
  8. SLAM技术课程总结
  9. 如何学习有限元分析 有限元分析学习心得
  10. Win7定时任务——提醒自己喝水