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

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

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

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

相关文章

【古诗生成AI实战】之一——实战项目总览

[1] 总览 【古诗生成AI实战】系列共五篇文章: 【古诗生成AI实战】之一——实战项目总览   【古诗生成AI实战】之二——项目架构设计   【古诗生成AI实战】之三——任务加载器与预处理器   【古诗生成AI实战】之四——模型包装器与模型的训练   【古诗生成AI…

【双指针】三数之和

三数之和 在做这道题之前,建议建议先将两数之和做完再做,提升更大~ 文章目录 三数之和题目描述算法原理解法一解法二思路如下:处理细节问题: 代码编写Java代码编写C代码编写 15. 三数之和 - 力扣(LeetCode&#xff0…

knife4j集合化postman

knife4j集合化postman 01 knife4j的介绍 基于 JavaMVC的集成框架swagger的进一步强化,在原有通过注释就能生成文档的前身swagger-bootstrap-ui之上,增加了postman的测试功能,优化了文档的UI界面,在测试api接口的方面有了极大的进…

香橙派5 RK3588 yolov5模型转换rknn及部署踩坑全记录 orangepi 5

零、写在前面 由于距离写这篇文章过去很久,有的部分,官方已更新,请多结合其他人的看,并多琢磨、讨论~ 另外打个小广告:博客 https://blog.vrxiaojie.top/ 欢迎大家前来做客玩耍,提出问题~~ 以后的文章都会…

笔记(三)maxflow push relabel与图像分割

笔记(三)maxflow push relabel与图像分割 1. Push-Relabel算法思想2.Push-Relabel算法原理示意图3.Push-Relabel算法具体实例4. push relabel与图割 1. Push-Relabel算法思想 对于一个网络流图: 该算法直观可以这样理解,先在源节点处加入充足…

【经验分享】开发问题记录总结(持续更新)

目录 工具开发 界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角? 在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较&…

Flask WTForms 表单插件的使用

在Web应用中,表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能,简化了表单的处理流程。与此同时,Flask的扩展Flask-WTF更进一步地整合了WTForms,为开发者提供了更便捷、灵活的表单处理方式…

【STM32单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能: 系统运行后,数码管默认显示0,输入对应的操作数进行四则运…

Echarts 设备状态 甘特图

在做工厂智能化生产看板时,绝对会有设备状态看板,展示设备当天或者当前状态,设备状态数据一般是有mes 系统设备管理模块对设备信息进行采集,一般包括过站数据,设备当前状态,是否在线是否故障、检修、待生产…

【计算机网络笔记】多路访问控制(MAC)协议——轮转访问MAC协议

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

树状数组 / pbds解法 E2. Array Optimization by Deque

Problem - 1579E2 - Codeforces Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组解法 将 a i a_i ai​插入到队头,贡献为:原队列中所有比 a i a_i ai​小的数的数量将 a i a_i ai​插入到队尾,贡献为&a…

极客时间:使用本地小型语言模型运行网页浏览器应用程序。

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车,如果没安装,会提示让输入 sudo apt-get install hexedit 照着输入命令,安装。安装完成后,cd到一个有二进制文件的目录下,输入hexedit命令回车 再…

集线器-交换机-路由器

1.集线器(Hub) 集线器就是将网线集中到一起的机器,也就是多台主机和设备的连接器。集线器的主要功能是对接收到的信号进行同步整形放大,以扩大网络的传输距离,是中继器的一种形式,区别在于集线器能够提供多端口服务,也…

从0开始学习JavaScript--构建强大的JavaScript图片库

在现代Web开发中,图像是不可或缺的一部分,而构建一个强大的JavaScript图片库能够有效地管理、展示和操作图像,为用户提供更丰富的视觉体验。本文将深入探讨构建JavaScript图片库的实用技巧,并通过丰富的示例代码演示如何实现各种功…

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络,就让我想起的就是一张图。我在网上可以为所欲为,反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式,来举一个例子。 从tcp三次握手来说,…

基于Loki + Promtail + Grafana 搭建 Nginx 日志监控

文章目录 引言第一部分:Loki 简介与安装1.1 Loki 简介1.2 Loki 安装1.2.1 下载 Loki1.2.2 安装 Loki 1.3 启动 Loki 第二部分:Promtail 简介与安装2.1 Promtail 简介2.2 Promtail 安装2.2.1 下载 Promtail2.2.2 安装 Promtail 2.3 启动 Promtail 第三部分…

231126 刷题日报

1. 高楼扔鸡蛋 O(N*logN) 2. 698. 划分为k个相等的子集 没做出来,和划分两个子集不同 3. 300. 最长递增子序列 LIS petencie sorting 没看懂,明天看吧 4. 518. 零钱兑换 II 完全背包问题:每个物品数量是无限的 注意:dp的定义…

使用不平衡数据集练习机器学习

一、介绍 在当今世界,机器学习和人工智能几乎被广泛应用于每个领域,以提高绩效和结果。但如果没有数据,它们还有用吗?答案是否定的。机器学习算法严重依赖我们提供给它们的数据。我们提供给算法的数据质量在很大程度上决定了机器学…

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项竞赛正式试题

第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题 目录 一、竞赛时间 二、竞赛阶段 三、竞赛任务书内容 (一)拓扑图 (二)A模块基础设施设置/安全加固(200分) (三&#xf…