使用GRU进行天气变化的时间序列预测

本文基于最适合入门的100个深度学习项目的学习记录,同时在Google clolab上面是实现,文末有资源连接

天气变化的时间序列的难点

天气变化的时间序列预测涉及到了一系列复杂的挑战,主要是因为天气系统的高度动态性和非线性特征。以下是几个主要难点以及为什么要使用深度学习方法来解决这些问题:

天气变化时间序列的难点

  • 非线性和多尺度动态:天气系统涉及从微观到宏观的多尺度过程,这些过程相互作用,形成非常复杂的非线性动态系统。例如,局部的温度变化可能会受到遥远地区气候模式的影响。

  • 高维度和多变量:天气预测通常涉及多个变量(如温度、湿度、风速、气压等),这些变量之间存在相互依赖关系,增加了预测的复杂性。

  • 时空关联性:天气数据在时间和空间上都表现出强烈的相关性。时间上的连续性和空间上的地理分布都对预测模型提出了挑战。

为什么使用深度学习

深度学习方法,特别是基于循环神经网络(RNN)的变体,如长短期记忆网络(LSTM)和门控循环单元(GRU),对于天气变化的时间序列预测非常有用,原因包括:

  • 能够处理非线性和高维度数据:深度学习模型能够自动学习和提取高维数据中的复杂特征和非线性关系,无需人工设计特征。

  • 记忆长期依赖关系:LSTM和GRU等RNN变体专门设计用来处理序列数据,能够记住长期的依赖关系,这对于理解天气数据中的时序动态非常关键。

  • 时空数据建模能力:通过结合卷积神经网络(CNN)和RNN,深度学习模型能够同时捕捉数据的时空特征,这对于天气预测尤为重要。

  • 灵活性和可扩展性:深度学习模型可以通过增加网络深度和宽度来提高其复杂性和表达能力,从而更好地处理大规模和复杂的气象数据。

  • 自动特征提取:深度学习免除了传统机器学习方法中需要手动特征工程的步骤,能够自动从原始数据中提取有用的特征。
    在这里插入图片描述

数据集介绍

背景描述
一个天气时间序列数据集,它由德国耶拿的马克思 • 普朗克生物地球化学研究所的气象站记录。在这个数据集中,每 10 分钟记录 14 个不同的量(比如气温、气压、湿度、风向等),其中包含2009-2016多年的记录。

数据说明
格式:csv

数据来源
下载1:https://www.kaggle.com/datasets/stytch16/jena-climate-2009-2016
下载2:https://s3.amazonaws.com/keras-datasets/jena_climate_2009_2016.csv.zip
在这里插入图片描述

定义网络结构

Gated Recurrent Unit (GRU) 是一种用于处理序列数据的深度学习模型,特别是在自然语言处理和时间序列分析中非常受欢迎。GRU被设计来解决标准循环神经网络(RNN)难以捕捉长期依赖关系的问题。它通过引入更新门(update gate)和重置门(reset gate)来优化长序列中信息的流动,从而有效地捕捉到长距离依赖关系,同时减少计算复杂性和缓解梯度消失问题。
在这里插入图片描述

GRU网络结构的关键组件:

更新门(Update Gate):

更新门帮助模型决定之前的状态有多少信息需要保留到当前状态。它可以看作是决定何时更新隐藏状态的机制,这样可以保留长期依赖信息而忽略无关信息。
更新门的计算涉及当前输入和前一个隐藏状态,使用sigmoid函数来输出一个介于0到1之间的值,以控制保留信息的比例。

重置门(Reset Gate):

重置门决定了有多少过去的信息需要忘记,它允许模型抛弃与未来无关的信息,从而更灵活地学习数据中的依赖关系。
类似于更新门,重置门的值也是通过当前输入和前一个隐藏状态计算得到的,使用sigmoid函数确定保留多少之前状态的信息。
候选隐藏状态(Candidate Hidden State):

候选隐藏状态是一个临时状态,它包含了当前步骤可能需要添加到实际隐藏状态的信息。它的计算考虑了重置门的影响,允许模型在必要时丢弃无用的历史信息。
通过tanh函数处理,以确保其值在-1到1之间,有助于保持网络的非线性。

最终隐藏状态(Final Hidden State):

最终隐藏状态是当前时间步的输出,它结合了之前的隐藏状态和当前的候选隐藏状态,受更新门的控制。
通过更新门和候选隐藏状态的加权平均,模型可以选择保留多少旧状态信息以及添加多少新信息。

class GRU(nn.Module):def __init__(self, input_dim, hidden_dim, num_layers, output_dim):super(GRU, self).__init__()self.hidden_dim = hidden_dim  # 隐层大小self.num_layers = num_layers  # LSTM层数# input_dim为特征维度,就是每个时间点对应的特征数量,这里为14self.gru = nn.GRU(input_dim, hidden_dim, num_layers, batch_first=True)self.fc = nn.Linear(hidden_dim, output_dim)def forward(self, x):output, h_n = self.gru(x)  # output为所有时间片的输出,形状为:16,1,4# print(output.shape) torch.Size([16, 1, 64]) batch_size,timestep,hidden_dim# print(h_n.shape) torch.Size([3, 16, 64]) num_layers,batch_size,hidden_dim# print(c_n.shape) torch.Size([3, 16, 64]) num_layers,batch_size,hidden_dimbatch_size, timestep, hidden_dim = output.shape  # 将output变成 batch_size * timestep, hidden_dimoutput = output.reshape(-1, hidden_dim)output = self.fc(output)  # 形状为batch_size * timestep, 1output = output.reshape(timestep, batch_size, -1)return output[-1]  # 返回最后一个时间片的输出

优化器和损失函数

model = GRU(input_dim, hidden_dim, num_layers, output_dim)  # 定义LSTM网络
loss_function = nn.MSELoss()  # 定义损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)  # 定义优化器

模型训练

# 8.模型训练
for epoch in range(epochs):model.train()running_loss = 0train_bar = tqdm(train_loader)  # 形成进度条for data in train_bar:x_train, y_train = data  # 解包迭代器中的X和Yoptimizer.zero_grad()y_train_pred = model(x_train)loss = loss_function(y_train_pred, y_train.reshape(-1, 1))loss.backward()optimizer.step()running_loss += loss.item()train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1,epochs,loss)# 模型验证model.eval()test_loss = 0with torch.no_grad():test_bar = tqdm(test_loader)for data in test_bar:x_test, y_test = datay_test_pred = model(x_test)test_loss = loss_function(y_test_pred, y_test.reshape(-1, 1))if test_loss < best_loss:best_loss = test_losstorch.save(model.state_dict(), save_path)print('Finished Training')

在这里插入图片描述
数据集和代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义镜像上传阿里云

目录 前言 一、Alpine简介 二、Alpine 制作jdk镜像 2.1 jdkv2.0版本 2.2 jdkv3.0版本 三、镜像上传阿里云及下载 前言 上篇博主已经讲解过了自定义镜像&#xff0c;跟上篇文章我们继续衍生自定义镜像https://blog.csdn.net/2302_76638140/article/details/136352907 一…

CUDA学习笔记02:测试程序hello world

参考资料 Win10下在VS2019中配置使用CUDA进行加速的C项目 &#xff08;配置.h文件&#xff0c;.dll以及.lib文件等&#xff09;_vs2019 cuda-CSDN博客 配置流程 1. 新建一个一般的项目 2. 项目建好后&#xff0c;在项目里添加.cu测试文件 测试的.cu文件命名为cuda_utils.cu&…

MySQL——性能调优

性能调优&#xff08;重要&#xff09; SQL 优化的目的 减少磁盘 IO&#xff1a;尽可能避免全表扫描、尽量使用索引、尽量使用覆盖索引减少回表操作减少 CPU 和内存的消耗&#xff0c;尽可能减少排序、分组、去重之类的操作&#xff0c;尽量减少事务持有锁的时间 优化途径&…

Material UI 5 学习02-其它按钮组件

Material UI 5 学习02-其它按钮组件 一、IconButton按钮二、 ButtonGroup按钮组1、最基本的实例2、垂直按钮组 一、IconButton按钮 图标按钮通常适用于切换按钮&#xff0c;允许选择或选择单个选项 取消选择&#xff0c;例如在项目中添加或删除星号。 <IconButton aria-lab…

“互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑

场与人的关系 “人—货—场”是零售中重要的三要素&#xff0c;我们一直在追求&#xff0c;将零售中的人、货、场进行数字化并在云端进行整合&#xff0c;形成属于我们自己的云平台。 随着互联网技术为信息提供的便利&#xff0c;消费者的集体力量正在逐渐形成一股强大的反向…

保姆级GeoWebCache矢量瓦片切片流程

1矢量切片解决方案 1.1Geoserver配置geowebcache插件 参考文章 (53条消息) 独立安装geoservergeowebcache发布arcgis切片服务_itouch_ok的专栏-CSDN博客 1.将下载好的geoserver 2.19.3安装部署 将下载好的geowebcache 2.19.3的war包解压到 GeoServer 安装目录下./usr/loc…

使用Julia语言及R语言进行格拉布斯检验

在日常的计量检测工作中经常会处理各种数据&#xff0c;在处理数据之前会提前使用格拉布斯准则查看数据中是否存在异常值&#xff0c;如果存在异常值的话应该重新进行计量检测&#xff0c;没有异常值则对数据进行下一步操作。判断异常值常用的格拉布斯方法基于数据来自正态分布…

SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述 随着互联网架构的扩张&#xff0c;分布式系统变得日趋复杂&#xff0c;越来越多的组件开始走向分布式化&#xff0c;如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用&#xff0c;这些组件共同构成了繁杂的分布式网络。 思考以下…

智能驾驶规划控制理论学习06-基于优化的规划方法之数值优化基础

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

实践航拍小目标检测,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

高级货,极大提高效率,个人非常喜欢

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; FileConverter中文版是一款免费软件&#xff0c;具有强大的功能。它支持多种文件格式的转换&#xff0c;包括视频、音频、文档等。您可以批量转换文件…

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;Bert…

Tomcat概念、安装及相关文件介绍

目录 一、web技术 1、C/S架构与B/S架构 1.1 http协议与C/S架构 1.2 http协议与B/S架构 2、前端三大核心技术 2.1 HTML&#xff08;Hypertext Markup Language&#xff09; 2.2 css&#xff08;Cascading Style Sheets&#xff09; 2.3 JavaScript 3、同步和异步 4、…

Node.js与Webpack笔记(一)

这里使用的16.19.0版本&#xff0c;官网和github没找到&#xff0c;去黑马2023年课程里找 篇幅较大会卡&#xff0c;此篇幅不写Webpack部分&#xff0c;留着下一篇 初识 1.什么是Node.js? Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff…

【Linux】Linux原生异步IO:AIO

1、IO模型 1.1 简述 相信大家在搜索的时候,都会看到下面这张图,IO的使用场景:同步、异步、阻塞、非阻塞,可以组合成四种情况: 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可…

向微队列添加任务的四种方式

向微队列添加任务的四种方式 关于微任务&#xff0c;微队列&#xff0c;事件循环&#xff0c;可参考&#xff1a;深入&#xff1a;微任务与 Javascript 运行时环境 - Web API 接口参考 | MDN (mozilla.org) 先说答案, 四种方法&#xff1a; Promise.resolve().then();Mutation…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用&#xff1a; 为网页提供结构&#xff…

数据库管理-第158期 Oracle Vector DB AI-09(20240304)

数据库管理158期 2024-03-04 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&#xff09;1 创建示例表2 添加过滤条件的向量近似查询示例1示例2示例3示例4示例5示例6示例7 总结 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&a…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n&#xff0c;从第二个元素开始&#xff0c;将当前元素存储在临时变量temp中。 从当前元素的前一…

iOS 17.0 UIGraphicsBeginImageContextWithOptions 崩溃处理

在升级到iOS17后你会发现&#xff0c;之前版本运行的很好&#xff0c;这个版本突然会出现一个运行闪退。报错日志为*** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410 跟踪到具体的报错位置如下所示&a…