深度学习第2天:RNN循环神经网络
☁️主页 Nowl
🔥专栏《机器学习实战》 《机器学习》
📑君子坐而论道,少年起而行之
文章目录
介绍
记忆功能对比展现
任务描述
导入库
处理数据
前馈神经网络
循环神经网络
编译与训练模型
模型预测
可能的问题
梯度消失
梯度爆炸
其他的循环神经网络
结语
介绍
RNN也叫循环神经网络,普通的神经网络层的输入都是上一层的输出,而循环神经网络会在RNN层循环指定次数,这样的特点使得RNN在处理序列数据上表现得很好,因为它可以更好地记住前后文的关系
记忆功能对比展现
任务描述
我们有一段数字序列,我们训练一个神经网络,使得该模型能通过任意连在一起的两个数,判断出第三个数
我们先定义数字序列
data_sequence = [1, 3, 5, 2, 4, 9, 7, 6, 8]
导入库
import numpy as np
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
处理数据
# 准备训练数据,使用前两个数字作为输入,预测第三个数字,以此类推
X = []
y = []for i in range(len(data_sequence)-2):X.append([data_sequence[i], data_sequence[i+1]])y.append(data_sequence[i+2])X = np.array(X)
y = np.array(y)# 转换数据形状以适应RNN
X = X.reshape((X.shape[0], X.shape[1], 1))
我们打印X,得到下图结果,结果竖向排列,无法展示完全,X的形状为(7, 2, 1)(两两排列有七组数据,每组数据两个特征,每个特征单独输入)
打印y
为每两个数的第三个数
前馈神经网络
接下来我们定义一个简单的前馈神经网络
model = Sequential()
model.add(Dense(500, input_dim=2))
model.add(Dense(1))
该模型有三层,输入层(没有在这里定义,我们等下输入的数据就充当这一层),一个500个神经元的线性层(输入维度为二),一个输出维度为1的输出层(输入维度为上一层神经元的个数,即500)
循环神经网络
定义一个循环神经网络
# 创建RNN模型
model = Sequential()
model.add(SimpleRNN(500, input_shape=(2, 1)))
model.add(Dense(1))
该模型有三层,输入层(没有在这里定义,我们等下输入的数据就充当这一层),一个500个神经元的RNN层(input_shape=(2,1)的意思是时间步为2,每个时间步有一个数据,可以理解时间步为网络记忆的长度),一个输出维度为1的输出层(输入维度为上一层神经元的个数,即500)
编译与训练模型
# 编译模型
model.compile(optimizer='adam', loss='mse')# 训练模型
model.fit(X, y, epochs=200, batch_size=1, verbose=2)
- 编译阶段设置模型的优化器为adam,损失函数为mse
- 训练部分设置模型训练数据(X,y),设置训练回合为200次,批次为1,即一次输入一组数据,verbose决定了是否打印训练过程中的信息。verbose=2 表示打印每个 epoch 的信息,包括损失值和其他指标。verbose=0表示不打印任何信息,verbose=1表示打印进度条。
模型预测
接下来看看在相同神经元数量和相同训练批次上谁的效果更好吧
# 使用模型进行预测
input_data = np.array([[data_sequence[2], data_sequence[3]]])
predicted_value = model.predict(input_data)[0, 0]# 打印预测结果
print(f"输入序列: {data_sequence[2:4]},预测下一个数字: {predicted_value}")
我们训练后使用5, 2进行预测,查看原始数据,我们知道下一个数字应该是4,让我们看看两个模型运行的结果吧
前馈神经网络
循环神经网络
可以看到循环神经网络的效果更优
可能的问题
梯度消失
当在网络的反向传播过程中梯度逐渐减小到几乎为零时,就会出现梯度消失问题。这使得网络难以学习到远距离时间步的依赖关系,因为在反向传播时,较早时间步的信息无法有效传递给较晚时间步。
梯度爆炸
相反,梯度爆炸是指在反向传播中,梯度变得非常大,这可能导致权重更新变得非常大,模型不稳定。这可能导致数值溢出和无法收敛。
这两个问题在神经网络中都会出现,只是由于RNN的结构,梯度消失与梯度爆炸问题会更加显著
其他的循环神经网络
- LSTM,LSTM引入了三个门(门是一种控制信息流动的机制)来控制信息的输入、输出和遗忘。
- GRU,GRU是对LSTM的一种简化版本,它只包含两个门:更新门(Update Gate)和重置门(Reset Gate)。
这两种循环神经网络能有效地应对梯度消失和梯度爆炸的问题,这里先做了解,之后会具体介绍
结语
- 循环神经网络是深度学习中一种重要的结构,一般用来处理文本,语音的序列数据
- 我们通过一个比较直观地感受到了RNN的记忆功能
- 梯度消失与梯度爆炸问题在RNN中更加显著
感谢阅读,觉得有用的话就订阅下本专栏吧
相关文章:

深度学习第2天:RNN循环神经网络
☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 介绍 记忆功能对比展现 任务描述 导入库 处理数据 前馈神经网络 循环神经网络 编译与训练模型 模型预测 可能的问题 梯度消失 梯…...

深度学习之基于百度飞桨PaddleOCR图像字符检测识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介主要特点使用步骤 二、功能三、系统四. 总结 一项目简介 # Introduction to PaddleOCR Image Character Detection and Recognition System Based on Baidu…...

九、LuaTable(表)
文章目录 一、定义二、Table(表)的构造三、Table 操作(一)Table连接(二)插入和移除(三)Table 排序(四)Table 最大值 一、定义 table 是 Lua 的一种数据结构用来帮助我们创建不同的数…...

每日一题(LeetCode)----链表--链表最大孪生和
每日一题(LeetCode)----链表–链表最大孪生和 1.题目(2130. 链表最大孪生和) 在一个大小为 n 且 n 为 偶数 的链表中,对于 0 < i < (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n…...

腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
原创/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋,打算搭建一堆docker组件集群,最先开始是通过docker搭建redis集群,计划使用三个端口,分别是7001,7002,7003。 腾讯云服务器有防火墙限制,故…...

C++学习之路(十一)C++ 用Qt5实现一个工具箱(增加一个进制转换器功能)- 示例代码拆分讲解
上篇文章,我们用 Qt5 实现了在小工具箱中添加了《时间戳转换功能》功能。为了继续丰富我们的工具箱,今天我们就再增加一个平时经常用到的功能吧,就是「 进制转换 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具…...
C语言每日一题(40)栈实现队列
力扣232 用栈实现队列 题目描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并…...
Vue.js 的生命周期
Vue.js 的生命周期钩子函数是一组在 Vue 实例生命周期中执行的函数,它们允许你在特定阶段执行自定义逻辑。以下是 Vue.js 的生命周期钩子函数以及它们在生命周期中的执行时机: 1、beforeCreate: 在实例初始化之后,数据观测 (data observer)…...

SeaTunnel引擎下的SQL Server CDC解决方案:构建高效数据管道
在快速发展的数据驱动时代,实时数据处理已经成为企业决策和运营的关键因素。特别是在处理来自各种数据源的信息时,如何确保数据的及时、准确和高效同步变得尤为重要。本文着重介绍了如何利用 SqlServer CDC 源连接器在 SeaTunnel 框架下实现 SQL Server …...

【攻防世界-misc】Encode
1.下载解压文件,打开这个内容有些疑似ROT13加密,利用在线工具解密:ROT13解码计算器 - 计算专家 得到了解密后的值 得到解码结果后,看到是由数字和字母组成,再根据题目描述为套娃,猜测为base编码(…...

visual c++ 2019 redistributable package
直接安装下面包只有24M Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://aka.ms/vs/16/release/VC_redist.x64.exe ———————————————— 版权声明:本文为CSDN博主「kpacnB_Z」的原创文章…...

WPF中DataGrid解析
效果如图: 代码如下: <DataGrid Grid.Row"1" x:Name"dataGrid" ItemsSource"{Binding DataList}" AutoGenerateColumns"False"SelectedItem"{Binding SelectedItem,UpdateSourceTriggerPropertyChange…...

在数据库中进行表内容的修改(MYSQL)
根据表中内容,用命令语句创建数据库,表格,以及插入,修改,删除表格中的内容。 创建数据库:zrzy mysql> create database zrzy; 引用zrzy数据库: mysql> use zrzy; 创建student_info表&…...

Android中的多进程
在Android中也可以像pc一样开启多进程,这在android的编程中通常是比较少见的,以为在一个app基本上都是单进程工作就已经足够了,有一些特殊的场景,我们需要用多进程来做一些额外的工作,比如下载工作等。 在Android的An…...

Apache2.4 AliasMatch导致301重定向问题?
环境:ubuntu18.04-desktop apache2版本: rootubuntu:/etc/apache2# apache2ctl -v Server version: Apache/2.4.29 (Ubuntu) Server built: 2023-03-08T17:34:33apache配置: DocumentRoot /var/www/html # Alias就没事 # Alias "/my…...

广州华锐视点:基于VR元宇宙技术开展法律法规常识在线教学,打破地域和时间限制
随着科技的飞速发展,人类社会正逐渐迈向一个全新的时代——元宇宙。元宇宙是一个虚拟的、数字化的世界,它将现实世界与数字世界紧密相连,为人们提供了一个全新的交流、学习和娱乐平台。在这个充满无限可能的元宇宙中,法律知识同样…...

Maven——Maven使用基础
1、安装目录分析 1.1、环境变量MAVEN_HOME 环境变量指向Maven的安装目录,如下图所示: 下面看一下该目录的结构和内容: bin:该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关…...

U4_2:图论之MST/Prim/Kruskal
文章目录 一、最小生成树-MST生成MST策略一些定义 思路彩蛋 二、普里姆算法(Prim算法)思路算法流程数据存储分析 伪代码时间复杂度分析 三、克鲁斯卡尔算法(Kruskal算法)分析算法流程并查集-Find-set 伪代码时间复杂度分析 一、最…...
springboot 注解@JsonInclude
修饰 实体属性or实体类 //枚举值:ALWAYS,NON_NULL,NON_ABSENT,NON_EMPTY,NON_DEFAULT,CUSTOM,USE_DEFAULTS JsonInclude(Include.NON_EMPTY)//将该标记放在属性上,如果该属性为NULL则不参与序列化 //如果放在类上边,那对这个类的全部属性起作用 Inclu…...
Python 中文完整教程目录
Python 教程 Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。 Python 官网(…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...