深度学习第二天: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中更加显著

感谢阅读,觉得有用的话就订阅下本专栏吧

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

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

相关文章

spring-framework-5.2.25.RELEASE源码环境搭建

环境准备 spring-framework-5.2.25.RELEASEIntelliJ IDEA 2022.3.1java version “11.0.20” 2023-07-18 LTSGradle 5.6.4java version “1.8.0_301” 下载spring-framework-5.2.25.RELEASE源码 git clone https://gitee.com/QQ952051088/spring.git cd spring gradlew buil…

文件批量改名方法:文件自动批量重命名,提升文件管理效率

在日常工作中随着工作时间的推移,在文件数量日益增长的情况下,会在电脑中积累大量的文件。如果文件名混乱无序,查找和识别重要文件将变得非常困难。这不仅会浪费大量的时间和精力,还可能导致重要文件的丢失或混乱。文件批量改名可…

cmake install接口常用方式介绍

cmake install接口常用方式介绍 1 Synopsis2 Introduction2.1 DESTINATION <dir>2.2 PERMISSIONS <permission>...2.3 CONFIGURATIONS <config>...2.4 COMPONENT <component>2.5 EXCLUDE_FROM_ALL2.6 RENAME <name>2.7 OPTIONAL 3 Signatures4 E…

西安数字孪生赋能工业制造,加速推进制造业数字化转型

西安数字孪生、5G、工业物联网、工业互联网等新一代信息通信技术与工业制造业经济深度融合&#xff0c;通过对人、机、物、系统等全面连接&#xff0c;构建覆盖全产业链、全价值链的全新制造和服务体系&#xff0c;为工业乃至产业数字化、网络化、智能化发展提供实现途径&#…

【数据库篇】关系模式的表示——(2)规范化

范式&#xff1a;范式是符合某一种级别的关系模式的集合 规范化&#xff1a;是指一个低一级的范式的关系模式&#xff0c;通过模式的分解转换为若干个高一级范式的关系模式的集合。 1NF 每个分量必须是不可分开的数据项&#xff0c;满足这个条件的关系模式就是1NF。 2NF 若…

MobileNets发展与总结

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 引言MobileNetsMobileNet - V1思想代码实现 MobileNet - V2思想代码实现 MobileNet - …

图的邻接矩阵,邻接表的C语言实现(408真题)

图的邻接矩阵 数据结构定义 #define MAXV 50;//顶点数目的最大值 typedef struct{int vex[MAX]; //顶点表 int edge[MAXV][MAXV]; //邻接矩阵 int edgeNum,vexNum; //图中实际的边数和顶点数 }MGraph;初始化 void Matrix_Init(MGraph *Mgraph) {int v1, v2;//存储有边的…

SSF-CNN:空间光谱融合的卷积光谱图像超分网络

SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION 文章目录 SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION简介解决问题网络框架代码实现训练部分运行结果 简介 ​ 本文提出了一种利用空…

Redis面试题:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

目录 强一致性&#xff1a;延迟双删&#xff0c;读写锁。 弱一致性&#xff1a;使用MQ或者canal实现异步通知 面试官&#xff1a;redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff08;双写一致性&#xff09; 候选人&#xff1a;嗯&#xff…

【单片机学习笔记】STC8H1K08参考手册学习笔记

STC8H1K08参考手册学习笔记 STC8H系列芯片STC8H1K08开发环境串口烧录 STC8H系列芯片 STC8H 系列单片机是不需要外部晶振和外部复位的单片机&#xff0c;是以超强抗干扰/超低价/高速/低功耗为目标的 8051 单片机,在相同的工作频率下,STC8H 系列单片机比传统的 8051约快12 倍速度…

⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …

arduino的API函数

API在这里&#xff1a;Arduino Reference - Arduino Reference 我觉得一天是不可能学的完的&#xff0c;这么多呢 我现在觉得&#xff1a;不用去学习这些API&#xff0c;以后碰到再去看好了