[深度学习] 门控循环单元GRU

news2024/11/19 9:40:37

门控循环单元(Gated Recurrent Unit, GRU)是一种用于处理序列数据的递归神经网络(Recurrent Neural Network, RNN)变体,它通过引入门控机制来解决传统RNN在处理长序列时的梯度消失问题。GRU与长短期记忆网络(LSTM)相似,但结构更为简化。以下是GRU的详细介绍:

1. GRU的结构

GRU由以下几个主要部分组成:

  • 重置门(reset gate):控制当前时间步的输入如何与之前的记忆结合,用于决定要丢弃多少过去的信息。
  • 更新门(update gate):控制上一时间步的记忆如何流入当前时间步的记忆,用于决定要保留多少过去的信息。

具体来说,GRU的计算过程如下:

2. 公式表示

假设xt是当前时间步的输入,ht−1​是上一时间步的隐状态,则GRU的更新过程可以用以下公式表示:

  1. 重置门(reset gate)
    在这里插入图片描述
  2. 更新门(update gate)
    在这里插入图片描述
  3. 候选隐状态(candidate hidden state)
    在这里插入图片描述
  4. 当前隐状态(current hidden state)
    在这里插入图片描述
    其中:
  • σ 是sigmoid激活函数。
  • tanh 是tanh激活函数。
  • W和U 是权重矩阵,b是偏置项。
  • ⊙ 表示元素乘法(Hadamard积)。

3. GRU的工作原理

  • 重置门rt:决定了多少过去的记忆需要被重置或忽略。重置门的值接近0时,意味着更多的过去信息被丢弃;值接近1时,意味着保留更多的过去信息。
  • 更新门zt:决定了当前时间步的记忆如何与之前的记忆进行权衡。更新门的值接近0时,更多的过去记忆被保留;值接近1时,更多的当前信息被引入。

4. GRU与LSTM的比较

  • 结构:GRU比LSTM结构更简单,LSTM有三个门(输入门、遗忘门和输出门),而GRU只有两个门(重置门和更新门)。
  • 参数:由于结构较为简化,GRU的参数量比LSTM少,因此在某些任务中计算效率更高。
  • 性能:在许多任务上,GRU与LSTM的表现相当,有时GRU甚至表现得更好,特别是在数据量较少的情况下。

5. 应用场景

GRU广泛应用于自然语言处理(NLP)、语音识别、时间序列预测等领域,尤其适合需要处理长序列数据的任务。

6. 实现示例

在TensorFlow中,可以使用tf.keras.layers.GRU来实现一个GRU层:

import tensorflow as tf
import numpy as np

# 生成示例数据
# 输入序列(样本数量,时间步长,特征维度)
input_seq = np.random.randn(3, 5, 10).astype(np.float32)

# 定义GRU模型
model = tf.keras.Sequential([
    tf.keras.layers.GRU(20, return_sequences=True, input_shape=(5, 10)),  # 隐状态维度为20
    tf.keras.layers.GRU(20)  # 第二个GRU层
])

# 编译模型
model.compile(optimizer='adam', loss='mse')

# 打印模型摘要
model.summary()

# 生成示例标签(样本数量,输出维度)
output_seq = np.random.randn(3, 20).astype(np.float32)

# 训练模型
model.fit(input_seq, output_seq, epochs=10)

# 预测
predictions = model.predict(input_seq)
print(predictions)

代码解释
  1. 数据生成

    input_seq = np.random.randn(3, 5, 10).astype(np.float32)
    

    这里生成了一个随机的输入序列,假设有3个样本,每个样本有5个时间步,每个时间步有10个特征。

  2. 定义GRU模型

    model = tf.keras.Sequential([
        tf.keras.layers.GRU(20, return_sequences=True, input_shape=(5, 10)),
        tf.keras.layers.GRU(20)
    ])
    

    使用tf.keras.Sequential定义了一个简单的GRU模型。第一个GRU层的隐状态维度为20,并且返回所有时间步的输出。第二个GRU层的隐状态维度也为20,但只返回最后一个时间步的输出。

  3. 编译模型

    model.compile(optimizer='adam', loss='mse')
    

    使用Adam优化器和均方误差损失函数来编译模型。

  4. 打印模型摘要

    model.summary()
    

    打印模型的摘要信息,以查看模型的结构和参数数量。

  5. 生成示例标签并训练模型

    output_seq = np.random.randn(3, 20).astype(np.float32)
    model.fit(input_seq, output_seq, epochs=10)
    

    生成与输入序列匹配的随机标签,并使用这些标签来训练模型。

  6. 预测

    predictions = model.predict(input_seq)
    print(predictions)
    

    使用训练好的模型进行预测,并打印预测结果。

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

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

相关文章

Arduino 旋转编码器

Arduino 旋转编码器 电位计 Arduino - Rotary Encoder In this tutorial, we are going to learn how to use the incremental encoder with Arduino. In detail, we will learn: 在本教程中,我们将学习如何将增量编码器与Arduino一起使用。详细来说,…

iptables(11)target(SNAT、DNAT、MASQUERADE、REDIRECT)

简介 前面我们已经介绍了ACCEPT、DROP、REJECT、LOG,这篇文章我们介绍SNAT、DNAT、MASQUERADE、REDIRECT,这几个参数的定义我们在上篇文章中都有介绍,我这里再列出回顾一下 DNAT(目标地址转换)和 SNAT(源地址转换) 原理:修改数据包的源或目标 IP 地址。通常用于 NAT(…

Maven高级理解属性

属性 在这一章节内容中,我们将学习两个内容,分别是 属性版本管理 属性中会继续解决分模块开发项目存在的问题,版本管理主要是认识下当前主流的版本定义方式。 4.1 属性 4.1.1 问题分析 讲解内容之前,我们还是先来分析问题: …

Games101 透视投影矩阵推导

目录 齐次坐标 透视投影 透视投影的四棱锥体挤压为正交投影的长方体 变换规定 转换过程 观察1 观察2 关于任意一点挤压后向哪里移动的问题,简单推导了一下 齐次坐标 如下,(x, y, z, 1) 表示空间中的xyz点,让它每个分量乘以k&#…

MySQL 基础概念

MySQL逻辑架构 MySQL 服务器逻辑架构图 最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构,比如连接管理、授权认证、安全等等。 大多数MySQL的核心服务都在第二层,包括查询解析、分析、优化、…

空间的维度

空间的维度----中科院科学智慧火花 当今世界科学前沿,最具有挑战性和最激动人心的理论,莫过于弦理论,他不仅仅融合了相对论和量子理论,甚至被认为是终极理论。弦理论最核心的内容就是多维空间。由于时间和空间概念必然要写进物理…

Echarts 图表添加点击事件跳转页面,但只有图表部分点击才会跳转页面,坐标轴,区域缩放等点击不跳转。

默认的点击事件是这样的: myChart.on(click, function (param) {console.log(param) }) 这个事件需要点击具体图形才会触发,例如我上面的图,想选择a柱子,就需要明确点击到柱体才行,明显不符合正常的预期,正…

FullCalendar日历组件集成实战(16)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

【Linux】Wmware Esxi磁盘扩容

目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…

使用VBA隐藏图表中的系列

Excel中很多图表相关的操作,并不能通过录制宏得到代码,这个场景中,如下希望开发代码实现自动化,就会无从下手,其实只要找到相关的属性和方法,代码可能并不复杂。 Excel的线图如下所示,其中有三…

每日一学(面试考题)

1、ConCurrentHashMap为什么不允许key为null? 底层 putVal方法 中 如果key || value为空 抛出空指针异常 其实是为了避免在多线程并发场景下的歧义问题 在获取key 返回结果为null 无法判断是 put(k,v)的时候 value本身是n…

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7,并配置…

探索ONLYOFFICE桌面编辑器8.1:更强大的办公软件(新功能全新详解)

引入 时间到达2024年,办公软件已经成为不可或缺的的一部分。想到办公软件不知道大家首先想到那些产品 office 亦或是 WPS,但一个前者需要购买才能使用完整服务,一个漫天的弹广告不充会员什么都用不了。那难道世面上就没有一块正在好用无广告的…

一天跌20%,近500只下跌,低价可转债为何不香了?

6月以来,Wind可转债低价指数累计下跌7.3%,大幅跑输中价、高价转债。分析认为,市场调整的底层逻辑在于投资者对风险的重新评估和流动性的紧缩,宏观经济的波动和政策环境的不确定性、市场结构性的变化均对低价可转债市场产生了冲击。…

【 IM 服务】IM 翻译服务介绍

融云控制台 IM 翻译功能入口:IM 翻译 融云即时通讯业务提供 IM 翻译 插件,可为 IMLib 与 IMKit SDK 快速接入外部翻译服务,由融云服务端负责对接外部翻译服务供应商的鉴权、API 调用、账号管理、计费等流程。 提示: 1、该插件仅支…

COMSOL - 一个点光源是否总能照亮整个房间?

20 世纪 50 年代,数学家恩斯特施特劳斯(Ernst Straus)提出了一个有趣的问题:在一个侧壁由理想反射镜构成的任意形状的空房间里,一个点光源是否总能照亮整个房间?诺贝尔奖获得者罗杰彭罗斯(Roger…

背包模型——AcWing 423. 采药

背包模型 定义 背包模型是一种常见的算法问题模型,它主要涉及将一些物品放入一个容量有限的背包中,以达到某种最优目标,如最大化价值或最小化重量等。 运用情况 常用于资源分配、项目选择、货物装载等实际问题中。例如,在选择…

一次性掌握openlayers和cesium两个地图开发框架

又到一年毕业季,选择就业的同学,如果还没拿到offer,就要开始准备秋招了。 如果想找webgis相关的岗位,可以通过招聘信息,了解到企业的具体要求。其中,openlayers和cesium有多重要就不用我多说了。 掌握这两…

AI对职场的整顿

普通人离AI还有几年缓冲区,但早点做准备总是好的 AI淘汰的始终是跟不上时代的人。 现在很多公司都有AI培训,不仅GPT,还有Midjourney、Stable DIffusion等一系列AI工具。 像我们公司虽然今年招的少,但也会对新招的应届生统一进行…

VSCode运行前端项目-页面404

背景: 通过VSCode运行前端本地项目,运行成功后打开本地链接:http://1x.xxx.x.xxx:9803/ ,发现打开的页面重定向到404:http//1xx.xxx.x.xxx:9803/404; 并且控制台出现:Failed to load resource: …