时间序列预测——GRU模型
时间序列预测——GRU模型
在深度学习领域,循环神经网络(RNN)是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元(GRU)模型,包括其理论基础、公式、优缺点,并通过Python实现单步预测的示例。同时,将与长短时记忆网络(LSTM)进行比较,以更好地理解GRU的特性。
1. 引言
循环神经网络(RNN)是一类专门用于处理序列数据的神经网络。然而,传统的RNN存在梯度消失和梯度爆炸等问题,这导致了对长序列的有效建模变得困难。为了解决这些问题,门控循环单元(GRU)被提出。
2. GRU模型的理论
2.1 简介
门控循环单元(GRU)是由Cho等人于2014年提出的,旨在解决长短时记忆网络(LSTM)的一些问题。与LSTM相似,GRU也具有长期依赖性建模的能力,但其结构更加简单。GRU通过更新门和重置门来控制信息的流动,减少了参数数量,使得训练更加高效。
2.2 GRU的结构
GRU由两个门控制:更新门(Update Gate)和重置门(Reset Gate)。与LSTM不同,GRU没有细胞状态,而是直接使用隐藏状态。
GRU的隐藏状态更新公式为:
h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ~ t \begin{equation} h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t \end{equation} ht=(1−zt)⊙ht−1+zt⊙h~t
其中:
- h t h_t ht是当前时间步的隐藏状态。
- z t z_t zt 是更新门的输出。
- ⊙ \odot ⊙是逐元素相乘操作。
- h ~ t \tilde{h}_t h~t 是当前时间步的候选隐藏状态。
2.3 更新门和重置门
更新门(Update Gate)和重置门(Reset Gate)的计算分别为:
z t = σ ( W z ⋅ [ h t − 1 , x t ] ) \begin{equation} z_t = \sigma(W_z \cdot [h_{t-1}, x_t]) \end{equation} zt=σ(Wz⋅[ht−1,xt])
r t = σ ( W r ⋅ [ h t − 1 , x t ] ) \begin{equation} r_t = \sigma(W_r \cdot [h_{t-1}, x_t]) \end{equation} rt=σ(Wr⋅[ht−1,xt])
其中:
- W z W_z Wz 和 W r W_r Wr 是权重矩阵。
- σ \sigma σ 是sigmoid激活函数。
- [ h t − 1 , x t ] [h_{t-1}, x_t] [ht−1,xt] 是当前时间步的隐藏状态和输入拼接而成的向量。
2.4 候选隐藏状态
候选隐藏状态(Candidate Hidden State)的计算为:
h ~ t = tanh ( W ⋅ [ r t ⊙ h t − 1 , x t ] ) \begin{equation} \tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t]) \end{equation} h~t=tanh(W⋅[rt⊙ht−1,xt])
其中:
- W W W 是权重矩阵。
3. GRU模型与LSTM的区别
GRU与LSTM有相似之处,都采用了门控制机制,但它们在结构上存在一些区别。
- 参数数量:GRU的参数数量相对较少,因为它没有细胞状态,直接使用隐藏状态。
- 计算效率:由于参数较少,GRU在训练和预测时通常更加高效。
- 表达能力:LSTM的细胞状态允许更好地保留和传递信息,适用于更复杂的序列建模任务。但在某些场景下,GRU由于其简单性能够表达一些简单序列的依赖关系。
4. Python实现GRU的单步预测
接下来,将使用Python和深度学习库Keras实现GRU的单步预测。将使用一个简单的时间序列数据集,以便清晰展示模型的训练和预测过程。
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU, Dense# 创建示例时间序列数据
np.random.seed(42)
data = np.arange(0, 100, 0.1)
noise = np.random.normal(0, 1, len(data))
data += noise# 准备训练数据
seq_length = 10
x, y = [], []for i in range(len(data) - seq_length):x.append(data[i:i + seq_length])y.append(data[i + seq_length])x = np.array(x)
y = np.array(y)x = x.reshape((x.shape[0], x.shape[1], 1))# 构建GRU模型
model = Sequential()
model.add(GRU(50, activation='relu', input_shape=(seq_length, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')# 训练GRU模型
model.fit(x, y, epochs=50, verbose=0)# 使用训练好的模型进行单步预测
input_data = data[-seq_length:].reshape((1, seq_length, 1))
predicted_value = model.predict(input_data, verbose=0)# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data, label='Original Data')
plt.scatter(len(data) - 1, predicted_value, color='red', marker='o', label='GRU Prediction (Single Step)')
plt.title('GRU Model - Single Step Prediction')
plt.legend()
plt.show()
多步预测其实就是修改输入输出的维度,这里不再赘述,可参考LSTM的单步和多步预测。
6. 总结
本文深入介绍了GRU模型的理论基础和相关公式,分析了其优缺点,并通过Python实现了单步预测的示例。GRU作为一种高效而强大的深度学习模型,在时间序列预测中展现了出色的性能。在实际应用中,可以根据具体任务的要求进行调整和优化,以达到更好的预测效果。
相关文章:

时间序列预测——GRU模型
时间序列预测——GRU模型 在深度学习领域,循环神经网络(RNN)是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元(GRU)模型,包括其理论基础…...

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成
TeamCity是一个通用的 CI/CD 软件平台,可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 TeamCity 2023.11正式版下载 TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能&a…...
C语言:register类型变量
register—— 寄存器存储 register 是 C 语言中的一种存储类别(Storage Class),它用于告诉编译器将变量存储在寄存器中。在 C 语言中,变量的存储位置可以是寄存器、堆栈或静态存储区,使用 register 存储类别可以帮助我…...

android 自定义下拉框
一、 简介: 原生Android 提供的spinner下拉框不怎么方便,样式有点丑。修改起来麻烦,于是就自己动手写了一下拉列表。 实现原理使用的是,popwindow弹框,可实现宽高自定义,下拉列表使用listview. 二、pop弹框…...

揭开时间序列的神秘面纱:特征工程的力量
目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…...

vue3 源码解析(5)— patch 函数源码的实现
什么是 patch 在 vue 中 patch 函数的作用是在渲染的过程中,比较新旧节点的变化,通过打补丁的形式,进行新增、删除、移动或替换操作,此过程避免了大量的 dom 操作,提升了运行的性能。 patch 执行流程 patch 函数整体…...

蓝桥杯2024/1/28----十二届省赛题笔记
题目要求: 2、 竞赛板配置要求 2.1将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。 2.2键盘工作模式跳线 J5 配置为 KBD 键盘模式。 2.3扩展方式跳线 J13 配置为 IO 模式。 2.4 请注意 : 选手需严格按照以上要求配置竞赛板,编写和调…...

STM32+ESP8266 实现物联网设备节点
目录 一、硬件准备 二、编译环境 三、源代码地址 四、说明 五、测试方法 六、所有测试工具和文档 本项目使用stm32F103ZEesp8266实现一个物联网的通信节点,目前支持的协议有mqtt,tcp。后续会持续更新,增加JSON,传感器&#…...

免费的ChatGPT网站(7个)
还在为找免费的chatGPT网站或者应用而烦恼吗?博主归纳总结了7个国内非常好用,而且免费的chatGPT网站,AI语言大模型,我们都来接触一下吧。 免费!免费!免费!...,建议收藏保存。 1&…...

Go语言基础之单元测试
1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go …...
C++ easyX小程序(介绍几个函数的使用)
本小程序通过代码和注释,介绍了easyX窗口及控制台窗口的设置方法;还介绍了easyX中关于颜色、线型、画圆、画方、显示文字以及鼠标消息处理等函数的使用方法。为便于理解,本程序同时使用控制台和easyX窗口,由控制台控制程序运行、由…...
配置nginx以成功代理websocket
配置nginx以成功代理websocket 在使用socket.io的时候遇到这样一个问题:websocket接收的消息的顺序错位了,然后看了一下浏览器的console的报错,提示连接到ws失败,然后在浏览器的开发者工具的网络中看了一下ws对应的消息里面报错&…...
代码随想录算法训练营第二十二天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
文档讲解: BST,各种插入删除操作 235.二叉搜索树的最近公共祖先 思路:昨天练习了二叉树的搜索,今天这道题是二叉搜索树的搜索,其具有有序这个特点,其能决定我们每次搜索是进入该节点的左子树还是右子树&…...
collection、ofType、select的联合用法(Mybatis实现树状结构查询)
需求 得到树结构数据也可以用lambda表达式也行,也可以直接循环递归也行,本文采用的是直接在Mybatis层得到结果,各有各的优势。 代码 1、实体类 Data public class CourseChapterVO implements Serializable {private static final long s…...

FLUENT Meshing Watertight Geometry工作流入门 - 4 局部加密区域
本视频中学到的内容: 使用Watertight Geometry Workflow 的 Create Local Refinement Regions 任务来创建细化的网格区域 视频链接: FLUENT Meshing入门教程-4创建局部加密区域_哔哩哔哩_bilibili 可以通过使用 Watertight Geometry Workflow 的 Create…...

前端添加富文本/Web 富文本编辑器wangeditor
官网wangEditor 需要引入两个文件 <link href"https://unpkg.com/wangeditor/editorlatest/dist/css/style.css" rel"stylesheet"> <script src"https://unpkg.com/wangeditor/editorlatest/dist/index.js"></script> 前端…...
软件价值2-贪吃蛇游戏
贪吃蛇游戏虽然很多,不过它可以作为软件创作的开端,用python来实现,然后dist成windows系统可执行文件。 import pygame import sys import random# 初始化 pygame.init()# 游戏设置 width, height 640, 480 cell_size 20 snake_speed 15# …...

应用案例 | 基于三维机器视觉的汽车副车架在线测量解决方案
在汽车制造领域中,精确的测量是确保产品质量和生产效率的关键。随着科技的不断进步,测量技术也在不断精进。 副车架是汽车底盘的重要组成部分,负责支撑引擎,是车辆结构中至关重要的组成部分之一,其制造质量直接关系到汽…...

线程的创建和使用threading.Thread()
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 线程的创建和使用 threading.Thread() [太阳]选择题 关于以下代码的输出是? import threading import time def f(name): print(name) for i in range(3): print…...
大数据学习之Redis,十大数据类型的具体应用(四)
3.8 Redis基数统计(HyperLogLog) 需求 统计某个网站的UV、统计某个文章的UV 什么是UV unique Visitor ,独立访客,一般理解为客户端IP 大规模的防止作弊,需要去重复统计独立访客 比如IP同样就认为是同一个客户 需要去…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...