深度学习:循环神经网络RNN及LSTM

深度学习:循环神经网络RNN及LSTM

  • 循环神经网络RNN
    • 原理
    • 代码
  • 长短期记忆网络LSTM
    • 原理
      • 遗忘门
      • 记忆门
      • 输出门
    • 代码

循环神经网络RNN

原理

对于传统的神经网络,它的信号流从输入层到输出层依次流过,同一层级的神经元之间,信号是不会相互传递的。这样就会导致一个问题:输出信号只与输入信号有关,而与输入信号的先后顺序无关;并且神经元本身也不具有存储信息的能力,整个网络也就没有“记忆”能力。当输入信号是一个跟时间相关的信号时,如果我们想要通过这段信号的“上下文”信息来理解一段时间序列的意思,传统的神经网络结构就显得无力了。与我们人类的理解过程类似,我们听到一句话时往往需要通过这句话中词语出现的顺序以及我们之前所学的关于这些词语的意思来理解整段话的意思,而不是简单的通过其中的几个词语来理解。

因此,我们需要构建具有“记忆”能力的神经网络模型,用来处理需要理解上下文意思的信号,也就是时间序列数据。循环神经网络(RNN)被设计用来处理这类时间序列数据,它存储每一步时间信息,利用历史时刻隐藏状态的特征和当前时刻的输入来预测未来的输出。其网络结构示意图如下:
在这里插入图片描述
传统的循环神经网络结构较为简单,仅通过tanh函数实现历史时刻状态和当前时刻输入到当前时刻的输出。示意图如下:
在这里插入图片描述

代码

利用pytorch实现循环神经网络RNN:

# -*- coding:UTF-8 -*-
import torch
from torch import nn# Define Recurrent Neural Networks
class myRNN(nn.Module):"""Parameters:- input_size: feature size- hidden_size: number of hidden units- output_size: number of output- num_layers: layers of LSTM to stack"""def __init__(self, input_size, hidden_size=1, output_size=1, num_layers=1):super().__init__()rnn = nn.RNN(input_size, hidden_size, num_layers)self.ffn = nn.Linear(hidden_size, output_size)def forward(self, _x):x, _ = self.rnn(_x)  # _x is input, size (seq_len, batch, input_size)s, b, h = x.shape  # x is output, size (seq_len, batch, hidden_size)x = x.view(s*b, h)x = self.ffn(x)x = x.view(s, b, -1)return x

长短期记忆网络LSTM

原理

虽然循环神经网络在语音识别、自然语言处理、视频图像处理等领域已经取得了一定的成果,但其实际使用较少,因为它存在一定的局限性,例如当时间步数较大时,循环神经网络容易发生梯度爆炸。其次循环神经网络虽然在理论上可以保留所有历史时刻的信息,但在实际使用时,信息的传递往往会因为时间间隔太长而逐渐衰减,传递一段时刻以后其信息的作用效果就大大降低了。因此,普通的RNN对于信息的长期依赖问题没有很好的处理办法。而使用门控循环神经网络(Gated RNN)可以解决此问题,例如长短期记忆网络(Long Short Term Memory Network,LSTM)。

LSTM主要包括三个不同的门结构:遗忘门、记忆门和输出门。这三个门用来控制LSTM的输入信号 X t X_t Xt的保留和传递,最终反映到细胞状态(中间状态) C t C_t Ct和输出信号 h t h_t ht。其网络结构示意图如下图所示:

在这里插入图片描述
LSTM 的关键是细胞状态 C t C_{t} Ct,实现对当前LSTM的状态信息的更新并传递到下一时刻的LSTM中。
在这里插入图片描述

遗忘门

遗忘门的作用就是用来舍弃信息的。通过一个Sigmoid函数输出0~1的信号来决定哪些信息需要遗忘。
在这里插入图片描述

记忆门

记忆门的作用就是用来保留信息的,它利用一个Sigmoid函数和tanh函数来决定新输入的信息 x t x_t xt h t − 1 h_{t-1} ht1中哪些信息需要保留。
在这里插入图片描述
更新细胞状态 C t C_{t} Ct
在这里插入图片描述

输出门

在经过了前面遗忘门与记忆门选择后的细胞状态 C t − 1 C_{t-1} Ct1,与 t − 1 t-1 t1时刻的输出信号 h t − 1 h_{t-1} ht1 t t t时刻的输入信号 x t x_t xt整合到一起作为当前时刻的输出信号 h t h_t ht
在这里插入图片描述

代码

利用pytorch实现长短期记忆网络LSTM:

# -*- coding:UTF-8 -*-
import torch
from torch import nn# Define LSTM Neural Networks
class myLSTM(nn.Module):"""Parameters:- input_size: feature size- hidden_size: number of hidden units- output_size: number of output- num_layers: layers of LSTM to stack"""def __init__(self, input_size, hidden_size=1, output_size=1, num_layers=1):super().__init__()self.lstm = nn.LSTM(input_size, hidden_size, num_layers) # utilize the LSTM model in torch.nn self.ffn = nn.Linear(hidden_size, output_size)def forward(self, _x):x, _ = self.lstm(_x)  # _x is input, size (seq_len, batch, input_size)s, b, h = x.shape  # x is output, size (seq_len, batch, hidden_size)x = x.view(s*b, h)x = self.ffn(x)x = x.view(s, b, -1)return x

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

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

相关文章

华为CD32键盘使用教程

华为CD32键盘使用教程 用爱发电写的教程! 最后更新时间:2023.9.12 型号:华为有线键盘CD32 基本使用 此键盘在不安装驱动的情况下可以直接使用,但是不安装驱动指纹识别是无法使用的!并且NFC功能只支持华为的部分电脑…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能,使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M,分包有两种情况:普通分包和独立分包,下面介绍的是普通分包。官方文档…

《使用 Helm 管理 Kubernetes 应用程序的最佳实践》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

骨传导耳机的危害有哪些?会损害听力吗?

如果正常的使用,骨传导耳机是没有危害的,由于骨传导耳机独特的传声方式,所以并不会对人体造成损伤,还可以在一定程度上保护听力。 如果想更具体知道骨传导耳机有什么危害,就要先了解什么是骨传导耳机,骨传…

vue-tabel 中使用 el-autocomplete 出现的问题

必须加 :popper-append-to-body"false" :popper-class"vxetableignoreclear" 我自己用的话缺一不可 说一下我自己项目中遇到的问题吧,我写的是表格中套表格,会出现就是当下拉选的时候用selete是可以用的,但是用blur也…

Revit SDK 介绍:TraverseSystem 用广度遍历的方式遍历MEP系统

前言 这个例子介绍了用广度遍历的方式遍历MEP系统。 内容 打开 Revit 自带例子,选择红框中的某条风管,不要选择机械,图中选中只是为了和遍历结果对应: 红色区域到风管机的遍历结果: 核心逻辑 遍历逻辑主函数&am…

【Vue】vue2使用vue-pdf预览pdf文件,预览多页,在线预览方式二,vue页面内预览,无需额外pdfjs包,保姆级教程

系列文章目录 【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包…

【海思SS626 | 开发环境】VMware17安装Ubuntu 18.04.6

目录 一、下载 Ubuntu 18.04.6 LTS二、VMware17创建虚拟机三、安装Ubuntu18.04LTS四、安装其他软件五、总结 一、下载 Ubuntu 18.04.6 LTS 问题:为什么要下载 Ubuntu18.04.6 LTS 而不是使用最新的,或者其他Linux发行版? 答:在ss6…

ChatGPT AIGC 实现Excel行列多条件交叉查找

查找函数在Excel中一直是非常重要的知识点,我们让ChatGPT AIGC来总结一下关于查找函数的优点与了处。 Excel中的查找函数是一种非常强大且多用途的工具,具有以下优点和作用: 1. 数据定位:查找函数可以帮助我们在大量数据中快速定位某个特定的数据或信息。 2. 数据整理:如…

JAVA -华为真题-分奖金

需求: 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么&#xf…

TRT4-trt-integrate -self-driving道路分析

1#先看ONNX 查看大概结构 首先我们来看一下这个onnx: 可以看到这是一个全卷积网络,因为输入输出的宽高都一样 后来的这里是加入了softmax,所以获得的是概率值,所以最终的输出output是1*512*596*4的概率值。仅仅是不确定四个通道代…

5.后端·新建子模块与开发(自动模式)

文章目录 学习资料自动生成模式创建后端三层 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p11&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 自动生成模式创建后端三层 首先,运行起来若依的前后端整个项目,…

css画一条渐变的虚线

效果展示 原理&#xff1a;给元素设置一个渐变的背景色&#xff0c;画一条白色的虚线盖住背景&#xff0c;就达到了渐变虚线的效果 代码&#xff1a; <div class"pending-line"></div>.pending-line{width: 101px;border-top: 2px dashed #fff; // do…

豆瓣图书评分数据的可视化分析

导语 豆瓣是一个提供图书、电影、音乐等文化产品的社区平台&#xff0c;用户可以在上面发表自己的评价和评论&#xff0c;形成一个丰富的文化数据库。本文将介绍如何使用爬虫技术获取豆瓣图书的评分数据&#xff0c;并进行可视化分析&#xff0c;探索不同类型、不同年代、不同…

计算机网络第三节物理层

目录 一&#xff0c;第二章 物理层&#xff08;数据通信有关&#xff09; 1.物理层引入的目的 2.物理层如何实现屏蔽 二&#xff0c;物理层引入的数据通信基础 1.通信模型 2.通信模型中的技术术语 三&#xff0c;数据通信的基础知识 1&#xff0c;数据通信模型 2&…

BIO NIO AIO演变

Netty是一个提供异步事件驱动的网络应用框架&#xff0c;用以快速开发高性能、高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发&#xff0c;是很多框架和公司都在使用的技术。 Netty并非横空出世&#xff0c;它是在BIO&#xff0c;NIO&#xff0c;AIO演变中的产物…

一文读懂LCD、OLED、LED屏的区别以及透明液晶屏原理

参考文章科普&#xff5c;一文读懂LCD、LED和OLED 的区别 - 知乎 参考文章透明液晶显示屏的原理&#xff1f; - 知乎 一、LCD LCD是英文Liquid Crystal Display 的简称&#xff0c;指的是液晶显示屏。 主要想介绍下LCD透明屏方案&#xff1a; 所谓LCD透明屏&#xff0c;并…

记录一次对登录接口的性能测试

测试环境 客户端: win10 这里可以用linux,但没用,因为想直观查看结果。 被测环境:linux X86 4核CPU16G内存 被测接口:登录接口,没有做数据驱动。 场景设计 设置线程数19,持续时间5分钟,并用后端监听器监听结果,使用grafana+prometheus监控服务器资源。 测试执行 …

思维导图怎么变成ppt?4个思维导图一键生成ppt的方法

做好的思维导图如何变成一份ppt&#xff1f;本文罗列了4个可行方法&#xff0c;一起来看看吧。 一 直接复制粘贴 这是最简单的方法&#xff0c;虽然这样可能会花费一些时间&#xff0c;但可以确保内容排版和布局与你想要的一致。当然&#xff0c;我们大可使用更高效的方法。…

成绩定级脚本(Python)

成绩评定脚本 写一个成绩评定的python脚本&#xff0c;实现用户输入成绩&#xff0c;由脚本来为成绩评级&#xff1a; #成绩评定脚本.pyscoreinput("please input your score:") if int(score)> 90:print("A") elif int(score)> 80:print("B&…