时间序列预测——GRU模型

时间序列预测——GRU模型

在深度学习领域,循环神经网络(RNN)是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元(GRU)模型,包括其理论基础、公式、优缺点,并通过Python实现单步预测的示例。同时,将与长短时记忆网络(LSTM)进行比较,以更好地理解GRU的特性。

1. 引言

循环神经网络(RNN)是一类专门用于处理序列数据的神经网络。然而,传统的RNN存在梯度消失和梯度爆炸等问题,这导致了对长序列的有效建模变得困难。为了解决这些问题,门控循环单元(GRU)被提出。

2. GRU模型的理论

2.1 简介

GRU cell

门控循环单元(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=(1zt)ht1+zth~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[ht1,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[ht1,xt])
其中:

  • W z W_z Wz W r W_r Wr 是权重矩阵。
  • σ \sigma σ 是sigmoid激活函数。
  • [ h t − 1 , x t ] [h_{t-1}, x_t] [ht1,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[rtht1,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作为一种高效而强大的深度学习模型,在时间序列预测中展现了出色的性能。在实际应用中,可以根据具体任务的要求进行调整和优化,以达到更好的预测效果。

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

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

相关文章

Flutter canvas 画一条会动的波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形,html 的 Canvas 也画过一次类似的, 今天用 Flutter Canvas 试了下 感觉差不多: html 版本 大致效果如下: 思路和 html 实现的类似: 也就是找出点的位置,使用二阶…

Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘

看下多语言js文件中,是否同级出现相同名称。

3D 转换

1,3D的特点: 近小远大 物体后面遮挡不可见 2,3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向 transform:translateX(100px):仅仅是在x轴上移动…

【C/C++ 07】词频统计

一、题目 读入一篇英文短文&#xff0c;去除介词、连词、冠词、副词、代词等非关键性单词后&#xff0c;统计每个单词出现的次数&#xff0c;并将单词按出现次数的降序和单词字符的升序进行显示5个单词。 二、算法 1. 通过<fstream>库创建fstream流对象&#xff0c;并从…

美区或其他外区Appstore账号AppleID注册教程,简单快速,苹果必备!

▍前言 现在越来越多的APP在国区APPstore下架&#xff0c;如果想有更好的使用体验&#xff0c;不得不去外区下载APP&#xff0c;那就需要一个外区的apple id&#xff0c;注册也很简单&#xff0c;今天大鹏通过电脑ipad给大家注册一个&#xff0c;建议大家直接使用iPhone或者iPa…

好书推荐丨保姆级Midjourney教程,这本写给大家看的设计书闭眼入!

文章目录 写在前面好书推荐Part.1Part.2Part.3 粉丝福利写在后面 写在前面 在AI绘画界&#xff0c;有每日经典一问&#xff1a;“你今天用Midjourney画了啥&#xff1f;”晒作品成为重头戏。 小红书上关于Midjourney出的图片点赞数惊人。 reddit上的恶搞幽默图片热度居高不下…

GSM-TRIAL-21.04.9-VMware-Workstation.OVA安装教程,GreenBone虚拟机安装教程

将GSM-TRIAL-21.04.9-VMware-Workstation.ova用VMware打开 先设置好网络和内存&#xff1a; 1、打开虚拟机&#xff0c;显示&#xff1a;你的GSM还不能完全正常工作。您想现在完成设置吗? 点击yes 2、创建用户&#xff0c;一会儿登录网页要用&#xff0c;点击yes 3、创建用户…

指向 Data Member 的指针

看一下很简单的一个例子&#xff1a; #include <stdlib.h> #include <stdio.h> #include <malloc.h>class origin { public:virtual ~origin(){} public:int x; };int main() {origin A;printf("&origin::x %p, &A.x %p\n", &origi…

小黄鸭聊电脑(4)硬盘分区

小黄鸭聊电脑(4)硬盘分区 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;…

洛夫克拉夫特与文学中的超自然恐怖:前哥特时代

洛夫克拉夫特与文学中的超自然恐怖&#xff1a;前哥特时代 ![ 洛夫克拉夫特是美国恐怖、科幻与奇幻小说作家&#xff0c;尤以其怪奇小说著称&#xff0c;他在自己的一系列小说中开发出了克苏鲁神话体系。他的创作对后世恐怖小说创造影响深远&#xff0c;我们可以在许多当代文…

[leetcode] 21. 合并两个有序链表

文章目录 题目描述解题方法双指针遍历java代码 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff…

自动驾驶:Apollo如何塑造人类的未来出行

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言1. 什么是自定义指令&#xff1f;2. Apollo中的自定义指令2.1 查询中的自定…

鸿蒙HarmonyOS——AVSession开发指导

AVSession开发指导 说明&#xff1a; AVSession的所有接口均为系统接口&#xff0c;其功能仅提供给系统应用使用。 会话接入端开发指导 基本概念 会话元数据AVMetadata: 媒体数据相关属性&#xff0c;包含标识当前媒体的ID(assetId)&#xff0c;上一首媒体的ID(previousAsset…

17. Spring Boot Actuator

17. Spring Boot Actuator Spring Boot执行器(Actuator)提供安全端点&#xff0c;用于监视和管理Spring Boot应用程序。 默认情况下&#xff0c;所有执行器端点都是安全的。 在本章中&#xff0c;将详细了解如何为应用程序启用Spring Boot执行器。 启用Spring Boot Actuator …

光纤熔接-热熔

实验教学日的及具体要求 目的 1.掌握室外光缆、皮线光缆的开剥方法。 2.掌握应用光纤切割刀制作光纤端面的方法 3.掌握光纤熔接的基本知识。 4.掌握光纤熔接机的使用方法及接续步骤。 任务 1.完成2芯光缆在终端盒内与尾纤的熔接 2.用激光笔完成光纤熔接检测。 …

如何使用mock.js实现接口测试的自动化?

Mock.js 基础用法介绍 Mock.js是一个常用于生成随机数据和拦截Ajax请求的JavaScript库。本文将介绍Mock.js的用法&#xff0c;包括安装和基础用法&#xff0c;在开始前我们可以看下看&#xff1a;了解 Mock.js 的语法规范。 安装 可以通过npm安装Mock.js&#xff1a; npm i…

敏捷认证大热:PMI-ACP

你是否在寻找一个能让你在不断变化的职场环境中脱颖而出的认证&#xff1f;PMI-ACP正是你需要的&#xff01;这个由美国项目管理协会PMI颁发的认证&#xff0c;是全球敏捷项目管理领域的权威代表。无论你是希望转型到项目管理领域&#xff0c;还是想提升现有项目管理技能&#…

Kafka下载安装及基本使用

目录 Kafka介绍 消息队列的作用 消息队列的优势 应用解耦 异步提速 削峰填谷 为什么要用Kafka Kafka下载安装 Kafka快速上手&#xff08;单机体验&#xff09; 1. 启动zookeeper服务 2. 启动kafka服务 3. 简单收发消息 Kakfa的消息传递机制 Kafka介绍 Apache Kafka…

模拟实现哈希表 - HashMap(Java版本)

目录 1. 概念 2. 冲突-概念 3. 冲突-避免 4. 冲突-避免-哈希函数设计 5. 冲突-避免-负载因子调节 ⭐⭐⭐⭐⭐ 6. 冲突-解决 6.1 冲突-解决-闭散列 6.2 冲突-解决-开散列/哈希桶 ⭐⭐⭐⭐⭐ 7. 冲突严重时的解决办法 8. 模拟实现 1. 概念 顺序结构以及平衡树中&#…

揭开时间序列的神秘面纱:特征工程的力量

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