RNN(循环神经网络)
创作时间:
作者:
@小白创作中心
RNN(循环神经网络)
引用
CSDN
1.
https://m.blog.csdn.net/weixin_63685622/article/details/138789686
循环神经网络(RNN)是处理序列数据的重要模型,在自然语言处理等领域有广泛应用。本文将详细介绍RNN的基本概念、作用、分类,以及其变体LSTM和GRU的原理和使用方法。
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基本原理详解
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优缺点
注:参考资料
热门推荐
电动两轮车双电瓶接线攻略:让你的爱车续航翻倍!
乳酸脱氢酶升高警惕心肌梗死、肝病等,及时就医是关键
尿酸高可以吃花生吗?一文解析
尿酸高可以吃花生吗?一文解析
岱山湖:合肥的“小西湖”,自然人文双绝
最新研究:常饮牛奶或增加肝癌、乳腺癌风险,北美研究证实与前列腺癌相关
起床头晕怎么办?这些方法帮你轻松应对
从降维到网络优化:1x1卷积在CNN中的多重作用
材料科学与工程等四专业入选,北方民族大学特色专业全览
雷锋精神暖银川:中外志愿者包饺子送祝福
北方民族大学:中国唯一建在自治区的部委高校,多学科协调发展
清华首进世界20强,中国大学排名创新高
风扇你选对了吗? 电脑机箱散热风扇选型的几个
新增600床位,郑大一附院西院区将投用,助力“一院多区”战略
揭秘反催收灰产新套路:房贷免息延期、征信修复都是假的
消费者投诉电话是多少
安全事故案例如何预防
田卫东医生:中医调理手抖头摇,一剂良方显成效
四肢无力的五大原因:从疲劳到神经疾病,附应对指南
思茅至昆明沿途路线及主要经过城市、地标详解
海南乐东黄流镇:千年古镇的文化魅力
2024年去北京必打卡:五大景点游览全攻略
从《如意娘》看武则天:一首情诗里的女皇柔情
爱情中的隐秘信号,你真的懂吗?
《高难度对话》教你读懂情感信号
情感沟通秘籍:让恋爱关系更甜蜜的五大技巧
恋爱保鲜秘籍:100个小技巧助你升温感情
项目管理软件与看板软件双管齐下,破解物流管理难题
美国卡车司机:高薪稳定的职业选择,年薪可达80万人民币
孔子屈原苏轼:三位文人圣贤的思想传承与现代启示