RNN(循环神经网络)

RNN(循环神经网络)RNN RecurrentNeu 中文称作循环神经网络 它一般以序列数据为输入 通过网络内部的结构设计有效捕捉序列之间的关系特征 一般也是以序列形式进行输出 RNN 的循环

大家好,欢迎来到IT知识分享网。

在这里插入图片描述

1.RNN简介

RNN(Recurrent Neural Network), 中文称作循环神经网络,它一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出.
在这里插入图片描述
在这里插入图片描述
RNN的循环机制使模型隐层上一时间步产生的结果,能够作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响.


  • 结构:三层,输入、输出、隐藏层(循环在隐藏层)

1.1RNN模型的作用:

因为RNN结构能够很好利用序列之间的关系,因此针对自然界具有连续性的输入序列,如人类的语言,语音等进行很好的处理,广泛应用于NLP领域(自然语言处理)的各项任务,如文本分类,情感分析,意图识别,机器翻译等.

  • 语言处理示例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述





1.2RNN的分类

1.2.1按照输入、输出的结构分类

N vs M:即N个输入,M个输出的RNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



相当于编码器(左下:N对1)和解码器(右上:1对M)

在这里插入图片描述

1.2.2按照RNN内部构造分类

RNN本身缺点:不可并行计算,故当数据量和模型体量过大会制约其发展;transform可改善其不可并行计算的问题。

在这里插入图片描述

2.传统RNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图中,括号内的为全连接层(线性层)
激活函数(tanh):用于帮助调节流经网络的值, tanh函数将值压缩在-1和1之间.



2.1 Pytorch中传统RNN工具的使用

  • 位置:在torch.nn工具包之中,通过torch.nn.RNN可调用.

在这里插入图片描述
在这里插入图片描述
torch.nn.RNN详解

import torch import torch.nn as nn rnn=nn.RNN(5,6,2)#实例化rnn对象 #参数1:输入张量x的维度-input_size #参数2:隐藏层的维度(隐藏层神经元个数)-hidden_size #参数3:隐藏层的层数-num_layers #torch.randn-随机产生正态分布的随机数 input1=torch.randn(1,3,5)#设定输入张量x-1层3行5列 #参数1:输入序列长度-sequence_lengh #参数2:批次的样本-batch_size(表示:3个样本每个样本一个字母(序列长)) #参数3:输入张量x的维度-input_size h0=torch.randn(2,3,6)#设定初始化的h0 #第一个参数: num_layers * num_directions(层数+网络方向数(1或2)) #第二个参酸: batch_size(批次的样本数) #第三个参酸: hidden_size(隐藏层的维度) output,hn=rnn(input1,h0) #最后输出和最后一层的隐藏层输出 print(output) print(output.shape) print(hn) print(hn.shape) 

在这里插入图片描述

RNN(循环神经网络)摘录自-循环神经网络 – RNN基本原理详解

2.2传统RNN优缺点

  • 优势:
    由于内部结构简单,对计算资源要求低,相比之后我们要学习的RNN变体:LSTM和GRU模型参数总量少了很多,在短序列任务上性能和效果都表现优异.
  • 缺点:
    传统RNN在解决长序列之间的关联时,通过实践,证明经典RNN表现很差,原因是在进行反向传播的时候,过长的序列导致梯度的计算异常,发生梯度消失或爆炸.
    在这里插入图片描述
    在这里插入图片描述


  • NaN值:(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。

3.LSTM模型

3.1 LSTM简介

在这里插入图片描述
在这里插入图片描述

3.1.1 遗忘门

在这里插入图片描述

图中sigma为sigmiod函数,将值压缩在0-1之间。

在这里插入图片描述
在这里插入图片描述

3.1.2 输入门

在这里插入图片描述
在这里插入图片描述

3.1.3 细胞状态

在这里插入图片描述
在这里插入图片描述

3.1.4 输出门

在这里插入图片描述
在这里插入图片描述

3.2Bi-LSTM

在这里插入图片描述
在这里插入图片描述

3.3 Pytorch中LSTM工具的使用

在这里插入图片描述
在这里插入图片描述

import torch import torch.nn as nn lstm=nn.LSTM(5,6,2)#实例化rnn对象 #参数1:输入张量x的维度-input_size #参数2:隐藏层的维度(隐藏层神经元个数)-hidden_size #参数3:隐藏层的层数-num_layers input1=torch.randn(1,3,5)#设定输入张量x-1层3行5列 #参数1:输入序列长度-sequence_lengh #参数2:批次的样本-batch_size(表示:3个样本每个样本一个字母(序列长)) #参数3:输入张量x的维度-input_size h0=torch.randn(2,3,6)#设定初始化的h0(隐藏层) c0=torch.randn(2,3,6)#设定初始化的c0(细胞状态) #第一个参数: num_layers * num_directions(层数+网络方向数(1或2)) #第二个参酸: batch_size(批次的样本数) #第三个参酸: hidden_size(隐藏层的维度) output,(hn,cn)=lstm(input1,(h0,c0)) #最后输出和最后一层的隐藏层输出 print(output) print(output.shape) print(hn) print(hn.shape) print(cn) print(cn.shape) 

在这里插入图片描述

3.4 LSTM优缺点

在这里插入图片描述

4.GRU模型

4.1GRU简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4.2Pytorch中LSTM工具的使用

import torch import torch.nn as nn gru=nn.GRU(5,6,2)#实例化rnn对象 #参数1:输入张量x的维度-input_size #参数2:隐藏层的维度(隐藏层神经元个数)-hidden_size #参数3:隐藏层的层数-num_layers input1=torch.randn(1,3,5)#设定输入张量x-1层3行5列 #参数1:输入序列长度-sequence_lengh #参数2:批次的样本-batch_size(表示:3个样本每个样本一个字母(序列长)) #参数3:输入张量x的维度-input_size h0=torch.randn(2,3,6)#设定初始化的h0 #第一个参数: num_layers * num_directions(层数+网络方向数(1或2)) #第二个参酸: batch_size(批次的样本数) #第三个参酸: hidden_size(隐藏层的维度) output,hn=gru(input1,h0) #最后输出和最后一层的隐藏层输出 print (output) print(output.shape) print(hn) print(hn.shape) 

在这里插入图片描述

4.3GRU优缺点

在这里插入图片描述

注:参考资料

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119691.html

(0)
上一篇 2025-11-03 18:26
下一篇 2025-11-03 18:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信