[深度学习]循环神经网络RNN

深度学习笔记(四)——循环神经网络(Recurrent Neural Network, RNN) 阅读详情

1 自然语言处理概述

  • 语料:一个样本,句子/文章
  • 语料库:由语料组成
  • 词表:分词之后的词语去重保存成为词表

2 词嵌入层

import jieba
import torch.nn as nn
import torch
# 文本数据
text='北京东奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。'
# 分词
words=jieba.lcut(text)
print(words)
# 构建词表
uwords=list(set(words))
print(uwords)
words_num=len(uwords)
print(words_num)
# 构建词向量矩阵
embed=nn.Embedding(num_embeddings=words_num,embedding_dim=5)
print(embed(torch.tensor(1)))
# 输出结果
for i,word in enumerate(uwords):
    print(word,end=' ')
    print(embed(torch.tensor(i)))
['北京', '东奥', '的', '进度条', '已经', '过半', ',', '不少', '外国', '运动员', '在', '完成', '自己', '的', '比赛', '后', '踏上', '归途', '。']
['自己', '运动员', '外国', '在', '后', '比赛', ',', '已经', '。', '过半', '不少', '进度条', '归途', '东奥', '踏上', '北京', '完成', '的']
18
tensor([-0.0293, -0.5446, -0.4495, -0.4013, -0.8653],
       grad_fn=<EmbeddingBackward0>)
自己 tensor([-0.0907, -0.6044,  1.9097,  1.1630, -0.4595],
       grad_fn=<EmbeddingBackward0>)
运动员 tensor([-0.0293, -0.5446, -0.4495, -0.4013, -0.8653],
       grad_fn=<EmbeddingBackward0>)
外国 tensor([ 1.9382, -1.3591, -0.2884, -1.4880, -0.2400],
       grad_fn=<EmbeddingBackward0>)
在 tensor([ 1.0954,  0.2975, -0.5151, -0.4355,  0.3870],
       grad_fn=<EmbeddingBackward0>)
后 tensor([-0.1857, -0.4351,  0.3869, -0.6311, -1.5527],
       grad_fn=<EmbeddingBackward0>)
比赛 tensor([-1.7570, -1.1983, -0.7864,  0.7223, -0.5285],
       grad_fn=<EmbeddingBackward0>)
, tensor([-0.2706,  1.7983,  0.9599, -0.5464,  0.7365],
       grad_fn=<EmbeddingBackward0>)
已经 tensor([ 1.4934, -0.7174,  1.1466, -0.3617,  0.6748],
       grad_fn=<EmbeddingBackward0>)
。 tensor([ 0.7996, -0.5406, -0.6476,  0.3923,  0.5128],
       grad_fn=<EmbeddingBackward0>)
过半 tensor([ 1.2070,  0.9933,  0.2634,  0.3173, -0.2273],
       grad_fn=<EmbeddingBackward0>)
不少 tensor([ 0.6716,  1.6509,  0.7375,  0.7585, -0.6289],
       grad_fn=<EmbeddingBackward0>)
进度条 tensor([ 0.4440,  1.9701,  0.6437, -0.2500, -0.8144],
       grad_fn=<EmbeddingBackward0>)
归途 tensor([-0.5646,  0.8995, -0.5827, -1.0231,  1.3692],
       grad_fn=<EmbeddingBackward0>)
东奥 tensor([-0.8312,  0.2083,  1.3728,  0.2860,  0.2762],
       grad_fn=<EmbeddingBackward0>)
踏上 tensor([ 0.0955,  0.5528, -0.5286,  0.6969, -0.7469],
       grad_fn=<EmbeddingBackward0>)
北京 tensor([ 0.4739,  0.6474,  0.3765, -1.9607, -1.1079],
       grad_fn=<EmbeddingBackward0>)
完成 tensor([ 1.2215, -0.3468, -0.1432,  0.5908,  1.2294],
       grad_fn=<EmbeddingBackward0>)
的 tensor([ 0.3083,  0.0163,  1.4923, -0.2768,  0.0904],
       grad_fn=<EmbeddingBackward0>)

3 循环网络RNN

  • 激活函数为tanh
  • 隐藏状态:当前词前面的信息 
  • [batch,seqlen(句子长度),词向量维度]
  • pytorch框架的[seq_len,batch,input_size]

# RNN层API
import torch.nn as nn
import torch
# 词向量维度128,隐藏向量维度256
rnn=nn.RNN(input_size=128,hidden_size=256,num_layers=2)
# 第一个数字:seq_len,句子长度,也就是词语个数
# 第二个数字:batch,批量个数,也就是句子的个数
# 第三个数字:input_size,词向量的维度
# [seq_len,batch,input_size]
x=torch.randn([32,10,128])
# 第一个数字:num_layers,隐藏层的个数
# 第二个数字:batch,批量个数,也就是句子的个数
# 第三个数字:hidden_size,隐藏向量的维度
# [num_layers,batch,hidden_size]
h0=torch.zeros([2,10,256])
output,hn=rnn(x,h0)
# [seq_len,batch,hidden_size]
print(output.shape)
# [num_layers,batch,hidden_size]
print(hn.shape)

4 文本生成案例

import jieba

# 构建词表
all_words = []
unique_words = []
for text in open('jaychou_lyrics.txt', 'r', encoding='utf8'):
    words = jieba.lcut(text)
    all_words.append(words)
    for word in words:
        if word not in unique_words:
            unique_words.append(word)

word2idx = {word: idx for idx, word in enumerate(unique_words)}
# print(all_words)
# print(unique_words)
# print(word2idx)
print(len(unique_words))
corpus_ids = []
for words in all_words:
    temp = []
    for word in words:
        temp.append(word2idx[word])
    temp.append(word2idx[' '])
    corpus_ids.extend(temp)
print(corpus_ids)

from torch.utils.data import Dataset

class textDataset(Dataset):
    def __init__(self, corpus_ids, seq_len):
        self.corpus_ids = corpus_ids
        self.seq_len = seq_len
        self.word_count = len(self.corpus_ids)
        self.number = self.word_count // self.seq_len

    def __len__(self):
        return self.number

    def __getitem__(self, idx):
        # idx指词的索引,并将其修正索引到文档的范围里面
        start = min(max(idx, 0), self.word_count - self.seq_len - 2)
        x = self.corpus_ids[start:start + self.seq_len]
        y = self.corpus_ids[start + 1:start + 1 + self.seq_len]
        return torch.tensor(x), torch.tensor(y)


dataset = textDataset(corpus_ids, 5)
print(dataset.__getitem__(1))

# 模型构建
from torch import nn
class textModel(nn.Module):
    def __init__(self,word_count):
        super().__init__()
        self.emb=nn.Embedding(num_embeddings=word_count,embedding_dim=128)
        self.rnn=nn.RNN(input_size=128,hidden_size=256,num_layers=1)
        self.fc=nn.Linear(in_features=256,out_features=word_count)
    def forward(self,x,h0):
        # x 输入的词索引序列 
        embed=self.emb(x)
        out,hn=self.rnn(embed.transpose(0,1),h0)
        output=self.fc(out.reshape(-1,out.shape[-1]))
        return output,hn
    def init_hidden(self,bs):
        '''
        num_layer=1
        bs=2
        hidden_size=256
        :return: 
        '''
        return torch.zeros(1,bs,256)

  

# 模型训练
import torch.optim as optim
from torch.utils.data import DataLoader
word_count=len(unique_words)
model=textModel(word_count)
# 损失
error=nn.CrossEntropyLoss()
# 优化器
optimizer=optim.Adam(model.parameters(),lr=0.001,betas=[0.9,0.99])
epoches=2
for epoch in range(epoches):
    dataloader=DataLoader(dataset=dataset,batch_size=2,shuffle=True)
    loss_sum=0
    num=0.1
    for x,y in dataloader:
        h0=model.init_hidden(len(y))
        out,hn=model(x,h0)
        # y=torch.transpose(y,0,1).reshape(-1)
        y=torch.transpose(y,0,1).contiguous().view(-1)
        loss=error(out,y)
        loss_sum+=loss.item()
        num+=1
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(loss_sum/num)
torch.save(model.state_dict(),'model.pth')

# 模型预测
model.load_state_dict(torch.load('model.pth',weights_only=True))
start_word='蝴蝶'
id=word2idx[start_word]

hn=model.init_hidden(bs=1)
idxs=[id]
for i in range(20):
    out,hn=model(torch.tensor([[id]]),hn)
    id=torch.argmax(out)
    idxs.append(id.item())
print(idxs)
for idx in idxs:
    print(unique_words[idx],end='')

深度学习之RNN(循环神经网络) 一 RNN概述     前面我们叙述了BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题.     1) BP算法,CNN之后, 为什么还有RNN?     细想BP算法,CNN(卷积神经网络)我们会发现, 他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数... 阅读详情

相关推荐

深度学习(Deep Learning)读书思考六:循环神经网络一(RNN)

概述 循环神经网络(RNN-Recurrent Neural Network)是神经网络家族中的一员,擅长于解决序列化相关问题。包括不限于序列化标注问题、NER、POS、语音识别等。RNN内容比较多,分成三个小节进行介绍,内容包括RNN基础以及求解算法、LSTM以及变种GRU、RNN相关应用。本节主要介绍 1.RNN基础知识介绍 2.RNN模型优化以及存在的问题 3.RNN模

互联网广告从业者,长期关注AI、计算广告以及搜广推相关技术,致力于广告投放、广告策略以及底层技术透明可视,太阳底下没有新鲜事,人人可懂可会 1万+

深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)

循环神经网络(Recurrent Nearal Networks, RNN)是一种专门用于处理序列数据的神经网络架构。它通过引入循环连接,使得网络能够捕捉序列中的时间依赖性和上下文信息。在RNN中,每个时间步的隐藏层不仅接收当前输入,还接收来自上一时间步隐藏层的输出,这种机制允许网络“记忆”过去的信息,从而有效处理如文本、语音、时间序列等序列数据。RNN广泛应用于自然语言处理(如机器翻译、情感分析)、语音识别、时间序列预测等领域,展现了强大的序列建模能力

2301_76820214的博客 2150

深度学习之基础模型——循环神经网络RNN

而反过来思考之前主要用于处理图像的 CNN,像素之间虽然确实可能存在潜在的关联,但是宏观角度我们并不清楚他们之间的联系,或者换句话说,图片像素之间的联系是空间维度,而并不是时间维度。比如现在我们想用神经网络处理行人的运动轨迹,如果我们用卷积神经网络,那么对于不同时间的轨迹数据,卷积权重都是一样的。如果我们从存在角度,这个句子如果写在纸上,那么其确实存在于空间维度,但是从理解角度,我们是从“你”字开始,依次往后看“这么”“年轻”“睡得着”,我们需要之前的汉字,才能辅助理解后面的汉字,乃至整个句子。

m0_61787307的博客 1845

深度学习------------------------RNN(循环神经网络)

"""在 'prefix' 后面生成新字符。"""# 获取模型的初始隐藏状态,批量大小为 1(对一个字符串做预测),设备为指定的设备# 将 prefix 的第一个字符索引添加到输出列表中# 定义一个函数 get_input,用于获取输入序列的张量表示# 输入序列只包含一个字符,将该字符的索引转换为张量,并进行形状调整为 (1, 1)# 对于 prefix 中除第一个字符之外的每个字符 y# 使用当前输入字符和隐藏状态进行前向传播计算,得到输出和更新后的隐藏状态。

Einstein·Jun 1259

动手学深度学习(五)循环神经网络RNN

假设有一个序列 x=[x1,x2,…,xT],我们可以把序列的联合概率分解为多个条件概率的乘积。

Willowii的博客 1465

【深度学习】手动实现RNN循环神经网络

🥇学习在于行动、总结和坚持,共勉!RNN的特别结构使得RNN具备了短期记忆能力,使其能够学习部分语义信息。

CXY819394的博客 1834

深度学习--RNN循环神经网络和LSTM

我们来看一看百度百科给的解释下面是循环神经网络的一部分黑色直线代表权重,a1,a2代表存储单元,黄色框框代表输入,曲线是激活函数。

ssheudjbdndnjd的博客 2439

深度学习100例-循环神经网络(RNN)实现股票预测 | 第9天

文章目录一、前言二、RNN是什么三、准备工作1.设置GPU2.加载数据四、数据预处理1.归一化2.设置测试集训练集五、构建模型六、激活模型七、训练模型八、结果可视化1.绘制loss图2.预测3.评估 一、前言 今天是第9天,我们将开始RNN系列,完成股票开盘价格的预测,最后的R2可达到0.72,CNN系列后续我也会穿插更新 我的环境: 语言环境:Python3.6.5 编译器:jupyter notebook 深度学习环境:TensorFlow2.4.1 往期精彩内容: 深度学习100例-卷积神经网络

“365天深度学习训练营”报名进行中~ 2万+

深度学习:循环神经网络(RNN)详解

循环神经网络(RNN)通过其递归结构能够有效处理序列数据,捕捉时序中的依赖关系。虽然RNN在许多任务中表现出色,但其存在的梯度消失和梯度爆炸问题限制了它在长序列任务中的应用。为了克服这些局限,LSTM和GRU等变体在保留RNN优势的基础上,通过引入记忆机制和门控机制,有效解决了梯度问题,显著提升了对长时间依赖关系的捕捉能力。随着神经网络的不断发展,RNN及其变体仍然在许多序列任务中扮演着重要角色,尤其是在自然语言处理、语音识别和时间序列分析等领域。然而,随着。

m0_73640344的博客 2988

跟着团子学SAP:SAP用户状态管理详解(含权限分配等) OK02

SAP用户状态详细配置逻辑及解析

Lucas1211的博客 3万+

【实践指南】Wasserstein距离在电力系统鲁棒优化中的核心应用

本文深入探讨了Wasserstein距离在电力系统分布鲁棒优化中的核心应用。针对风电、光伏出力的不确定性,文章阐述了如何利用Wasserstein距离构建模糊集,将复杂的分布鲁棒优化问题转化为可求解的确定性模型,并提供了从理论到代码实现的完整实践指南,有效平衡了系统运行的经济性与鲁棒性。

weixin_29229261的博客 308

深度学习之循环神经网络(Recurrent Neural Network,RNN)

递归神经网络和循环神经网络 循环神经网络(recurrent neural network):时间上的展开,处理的是序列结构的信息,是有环图 递归神经网络(recursive neural network):空间上的展开,处理的是树状结构的信息,是无环图 二者简称都是 RNN,但是一般提到的RNN指的是循环神经网络(recurrent neural network)。 为什么有bp神经网络、CNN、还需要RNN? BP神经网络和CNN的输入输出都是互相独立的;但是实际应用中有些场景输出内容和之前的内

fenglepeng的博客 1万+

如何用Arduino和HX711压力传感器制作一个简易电子秤(含OLED显示)

本文详细介绍了如何使用Arduino、HX711压力传感器和OLED显示屏制作一个简易电子秤。从硬件连接到软件编程,提供了分步教程,包括核心元件功能解析、接线方法、库安装、模块测试以及关键的校准流程。项目实践性强,适合创客和DIY爱好者学习嵌入式系统与传感器应用。

tea88的博客 537

深度学习-神经网络-循环神经网络(一):RNN(Recurrent Neural Network,循环神经网络;1990年)

为什么有了神经网络还需要有循环神经网络?在普通的神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。特别是在很多现实任务中,网络的输出不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。此外,普通网络难以处理时序数据,比如视频、语音、文本等,时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序相关的问题时,就需要一种能力更强的模型。循环神经网络(Recurrent Neural Net

u013250861的博客 1万+

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 397

开源代码分享(29)-基于拉丁超立方抽样的风光场景生成和削减

作为分层抽样方法的一 种,拉丁超立方抽样具有良好的抽样精度和效率[14]。本文使用多场景方法来描述可再生能源(风电、光伏)的不确定性。以风电功率为例,首先假定风电功率服从正态分布 N(μ, δ 2 ),μ 为预测值的期望值,δ 为其波动的百分比。接着,采用拉丁超立方抽样[21]生成大量服从概率分布约束的风电出力场景,并采用考虑 Kantorovich 距离[22]的场景削减技术处理该场景,进行场景削减。最后,导出具有相应概率的削减之后的场景。

配电网和matlab的博客 924

深度学习05-RNN循环神经网络

循环神经网络(Recurrent Neural Network,RNN)是一种具有循环连接的神经网络结构,被广泛应用于自然语言处理、语音识别、时序数据分析等任务中。相较于传统神经网络,RNN的主要特点在于它可以处理序列数据,能够捕捉到序列中的时序信息。RNN的基本单元是一个循环单元(Recurrent Unit),它接收一个输入和一个来自上一个时间步的隐藏状态,并输出当前时间步的隐藏状态。在传统的RNN中,循环单元通常使用tanh或ReLU等激活函数。

liaomin416100569的专栏 2万+

固高GTS运动控制卡C#实战:三轴点胶机样本程序深度拆解(从跑通到落地优化)

最近接手一款三轴桌面式点胶机项目,核心控制模块选了固高GTS-400-PV运动控制卡——工业场景里的“老熟人”,稳定、脉冲输出精准,支持多轴联动,完全能满足点胶机的精度需求(±0.01mm)。但拿到固高官方提供的C#样本程序时,却犯了难:样本程序只实现了“三轴联动运动”的基础功能,既没有结合点胶机的核心需求(运动与出胶同步、路径自定义、急停处理),也没讲清关键参数(电子齿轮比、加速时间)的计算逻辑,新手照着跑通后,根本不知道怎么适配实际点胶场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1831

深度学习——循环神经网络RNN公式推导

深度学习——循环神经网络RNN公式推导 1、循环神经网络引入 1.1 从传统网络到循环网络 对于传统的神经网络,在我们之前介绍的传统的神经网络中,主要包含输入层、隐藏层、输出层三个部分。其基本的图示如下: X表示输入层的向量,H表示隐藏层的向量,O表示输出层的向量。W表示从输入层到隐藏层的权重矩阵,V表示从隐藏层到输出层的权重矩阵。其中,每一层可以有多个神经元。每一层神经元的个数代表的是每一层的...

hei653779919的博客 8145

基于知识图谱的农作物病虫害问答系统设计与实现

基于规则的问题分类是自问答系统诞生以来就一直存在的方式,主要代表就是众多的专家系统,构建专家系统采用的是规则分类器,优点是能够对特定领域、特征明显的问题进行高效精准问答,但是。,在问答系统中,问题以语音及文本字符等自然语言形式输入,利用问答系统的内部的逻辑处理模块,通过自然语言处理技术获得输入问句的详细语义信息,再经过知识检索、置信分析等步骤,自然语言处理中,用于文本分类任务的机器学习方式有两种,一种用传统的机器学习,如 NBC、SVM 等,另一种采用深度学习,如 CNN 和 RNN 等。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2168

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【深度学习|学习笔记】循环神经网络(Recurrent Neural Network, RNN)详解,附代码。

【深度学习|学习笔记】循环神经网络(Recurrent Neural Network, RNN)详解,附代码。

2401_89898861的博客 929

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习4. 循环神经网络 – Recurrent Neural Network | RNN

RNN的独特价值在于:它能有效的处理序列数据。比如:文章内容、语音音频、股票价格走势…之所以他能处理序列数据,是因为在序列中前面的输入也会影响到后面的输出,相当于有了“记忆功能”。但是 RNN 存在严重的短期记忆问题,长期的数据影响很小(哪怕他是重要的信息)。于是基于 RNN 出现了 LSTM 和 GRU 等变种算法。长期信息可以有效的保留挑选重要信息保留,不重要的信息会选择“遗忘”文本生成语音识别机器翻译生成图像描述视频标记。

ZhangJiqun&191cm&85kg 2424

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【深度学习】常见模型-循环神经网络(Recurrent Neural Network, RNN)

循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据(如时间序列、文本序列等)的神经网络模型。与传统神经网络不同,RNN 的结构具有记忆能力,可以通过隐状态(hidden state)对输入序列的上下文信息进行建模。它在自然语言处理(NLP)、语音识别、时间序列预测等领域中应用广泛。RNN 是深度学习中一类重要的神经网络,尤其在处理时间依赖性或顺序相关的数据方面表现出色。虽然其基本形式存在一些局限,但通过改进版本(如 LSTM 和 GRU)克服了这些问题,为解决复

IT古董 1386

DL —— 循环神经网络(Recurrent Neural Network,RNN)

普通的神经网络无法预测前后有关联的数据信息,因为无法“记住”之前发生的数据; RNN 在分析新状态时,将之前的分析结果再次加进来一起分析,这样就可以分析前后有关联的信息; RNN 可以用来:描述图片、翻译、分析语言感情色彩…… ...

biubiusion的博客 588

深度学习之 12 循环神经网络RNN

循环神经网络

水w的博客 2775
上一篇: [深度学习]卷积神经网络CNN
下一篇: [自然语言处理]概述
Letmooning
博客等级 码龄2年 503粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值