pytorch(十)循环神经网络

CRNN——卷积循环神经网络结构 CRNN——卷积循环神经网络结构简介构成CNNMap-to-Sequence图解RNNctcloss序列合并机制推理过程编解码过程代码实现 简介 CRNN 全称为 Convolutional Recurrent Neural Network,是一种卷积循环神经网络结构,主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别。 CRNN可以用于解决基于图像的序列识别问题,特别是场景文字识别问题 构成 整个CRNN网络结构包含三部 阅读详情

卷积神经网络与循环神经网络的区别

卷积神经网络:在卷积神经网络中,全连接层的参数占比是最多的。

卷积神经网络主要用语处理图像、语音等空间数据,它的特点是局部连接和权值共享,减少了参数的数量。CNN通常包括卷积层、池化层和全连接层,卷积层用于提取输入数据的特诊,池化层用语降维和压缩特征,全连接层将特征映射到更加高维度的空间中。

卷积神经网络在处理空间数据的时候,其输入通常是一个二维或者三维的张量,每一个元素对应一个输出。CNN通过卷积操作获取特征,这些特征往往是局部相关的,即每个特征都与输入数据的一个局部区域相关联(相邻的特征往往具有相似性)。

循环神经网络

循环神经网络主要用于处理序列数据,比如自然语言处理、语音识别和时间序列预测(具有时间依赖的数据),它的特点是具有时间轴,能够保留和处理序列中的历史信息。RNN包括循环层,能够接收前一层的信息并且与当前的输入结合,生成当前的输出序列。

循环神经网络处理的数据往往是序列数据,即输入的数据是一个序列,每一个时间步都有一个对应的输出,RNN通过循环层保留和传递历史信息,从而建立时间上的依赖关系。

循环神经网络也使用到了权值共享的想法,RNN在不同的时间位置共享参数(CNN在不同的空间位置共享参数)

RNN cell结构

RNN cell的结构在本质上类似于传统的神经网络模型(输入层、隐藏层、输出层),但是RNN于传统的NN最大的区别在于:隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出,其结构如下:

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

之所以叫做循环神经网络,是因为以上的cell都是同一个cell,参数也只有cell里的一份而已,在训练中,cell层使用的是循环结构,使用不同的输入数据进行训练。

构造RNN

第一种方法 RNNCell

cell=torch.nn.RNNCell(input_size=input_size,hidden_size=hidden_size)
hidden=cell(input,hidden)
# input of shape(batch,input_size)
# hidden of shape(batch,hidden_size)
# output of shape(batch,hidden_size)
# dataset.shape(seqLen,batchSize,inputSize)
import torch

batch_size=1 # N=1
seq_len=3 # x=[x1,x2,x3]
input_size=4 # [4*3]
hidden_size=2 # [2*3]
# 两种构造方式——1
cell=torch.nn.RNNCell(input_size=input_size,hidden_size=hidden_size)

#(seq,batch=n,features) 序列的长度 * 批量 * 维度
dataset=torch.randn(seq_len,batch_size,input_size)
# 批量 * 维度
hidden=torch.zeros(batch_size,hidden_size)

print('dataset:',dataset)
print('hidden:',hidden)

# 构造循环
for idx,input in enumerate(dataset):
    print('=' *20,idx,'='*20)
    print(input)
    print('Input size:',input.shape)
    
    hidden=cell(input,hidden)
    
    print(hidden)
    print('Outputs size:',hidden.shape)
    print(hidden)

第二种方法

cell=torch.nn.RNN(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers)
out,hidden=cell(input,hidden)
# input:表示整个输入序列;input of shape(seqSize,batch,input_size),这里的seqSize实际上就是上面的循环过程
# hidden:表示h0;hidden of shape(numLayers,batch,hidden_size)
# output of shape(seqLen,batch,hidden_size)
import torch

batch_size=1 # N=1
seq_len=3 # x=[x1,x2,x3]
input_size=4 # [4*3]
hidden_size=2 # [2*3]
num_layers=1
# 两种构造方式——2 num_layers表示层数
cell=torch.nn.RNN(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers)
# cell=torch.nn.RNN(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers)
# inputs=torch.randn(batch_size,seq_len,input_size)

inputs=torch.randn(seq_len,batch_size,input_size)
hidden=torch.zeros(num_layers,batch_size,hidden_size)

out,hidden=cell(inputs,hidden)
print('Output size:',out.shape)
print('Output:',out)
print('Hidden size:',hidden.shape)
print('Hidden:',hidden)

例子 seq2seq

需要把 hello 序列经过训练变成 ohlol 序列,x=[x1,x2,x3,x4,x5]

这里是需要训练一个模型,使得输入“hello”,而输出为“ohlol”,实际上对于输入的数据,判别输出的数据属于哪一个类别,这里只有4种字母,所以输出的维度为4。

在这里插入图片描述

将序列数据转变成向量,一般转换为独热向量

在这里插入图片描述

import torch

batch_size=1
input_size=4
hidden_size=4

idx2char=['e','h','l','o']
# 字典转变
x_data=[1,0,2,2,3]
y_data=[3,1,2,3,2]

one_hot_looup=[[1,0,0,0],
              [0,1,0,0],
              [0,0,1,0],
              [0,0,0,1]]

x_one_hot=[one_hot_looup[x] for x in x_data]

# 两个数据中的-1表示序列的长度seqSize
inputs=torch.Tensor(x_one_hot).view(-1,batch_size,input_size)
print('inputs:',inputs)
labels=torch.LongTensor(y_data).view(-1,1)

class Model(torch.nn.Module):
    def __init__(self,input_size,hidden_size,batch_size):
        super(Model,self).__init__()
        self.batch_size=batch_size
        self.input_size=input_size
        self.hidden_size=hidden_size
        
        self.rnncell=torch.nn.RNNCell(input_size=self.input_size,hidden_size=self.hidden_size)
        
    def forward(self,input,hidden):
        hidden=self.rnncell(input,hidden)
        return hidden
    
    # h0
    def init_hidden(self):
        return torch.zeros(self.batch_size,self.hidden_size)
    
net=Model(input_size,hidden_size,batch_size)
criterion=torch.nn.CrossEntropyLoss()
optimizer=torch.optim.Adam(net.parameters(),lr=0.1)

for epoch in range(15):
    loss=0
    optimizer.zero_grad()
    hidden=net.init_hidden()
    
    print('Predicted string:',end='')
    # 这个实际上就是RNN
    for input,label in zip(inputs,labels):
        # print('input:',input,'label:',label)
        hidden=net(input,hidden)
        loss+=criterion(hidden,label)
        # 输出可能性最大的那个值,也就是预测的值
        _,idx=hidden.max(dim=1)
        print(idx2char[idx.item()],end='')
        
    loss.backward()
    optimizer.step()
    print(',Epoch [%d/15] loss=%.4f'%(epoch+1,loss.item()))

在这里插入图片描述

独热向量的缺点

  • 独热向量的维度过高,比如26个字母有26维度。给每一个汉字都映射一个独热向量会有维度的诅咒;
  • 独热向量过于稀疏;
  • 独热向量是硬编码,不是学习出来的,每一个向量对应都是确定的。

解决方案:Embedding,也就是把高维度的稀疏的数据映射成低维的稠密的数据中,也就是数据降维。

降维后的网络

在这里插入图片描述

import torch

batch_size=1
input_size=4
hidden_size=8
num_class=4
embedding_size=10
num_layers=2
seq_len=5

idx2char=['e','h','l','o']
# batch*seq_len
x_data=[[1,0,2,2,3]]
y_data=[3,1,2,3,2]

inputs=torch.LongTensor(x_data)
labels=torch.LongTensor(y_data)

class Model(torch.nn.Module):
    def __init__(self,input_size,hidden_size,batch_size):
        super(Model,self).__init__()
        self.emb=torch.nn.Embedding(input_size,embedding_size)
        self.rnn=torch.nn.RNN(input_size=embedding_size,hidden_size=hidden_size,num_layers=num_layers,batch_first=True)
        self.fc=torch.nn.Linear(hidden_size,num_class)
        
    def forward(self,x):
        hidden=torch.zeros(num_layers,x.size(0),hidden_size)
        x=self.emb(x)# batch,seqLen,embeddingSize
        x,_=self.rnn(x,hidden)
        x=self.fc(x)
        return x.view(-1,num_class)
    
net=Model(input_size,hidden_size,batch_size)
criterion=torch.nn.CrossEntropyLoss()
optimizer=torch.optim.Adam(net.parameters(),lr=0.05)

for epoch in range(15):
    optimizer.zero_grad()
    outputs=net(inputs)
    loss=criterion(outputs,labels)
    loss.backward()
    optimizer.step()
    
    _,idx=outputs.max(dim=1)
    idx=idx.data.numpy()
    print('Predicted:',''.join([idx2char[x] for x in idx]),end='')
    print(',Epoch [%d/15] loss=%.4f'%(epoch+1,loss.item()))

在这里插入图片描述

CNN(循环卷积神经网络) 这篇博客是看微软亚洲研究院的王井东讲解CNN做的笔记,图片居多。30分钟的视频,我看+写用了2个小时,可以说干货满满。适合已经对机器学习,CNN有一定了解的人,但对于CNN实践环节还不太清楚或者是想对最新的研究情况做进一步跟踪。视频资源见链接:https://v.qq.com/x/page/s05667eq28w.html视频主要从四个部分讲述CNN:卷积神经网络的基本架构、神经网络的组成、如何学... 阅读详情

相关推荐

pytorch实现RNN循环神经网络

一、概述循环神经网络(Recurrent Neural Network, RNN)是一类以(sequence)数据为输入,在序列的演进方向进行(recursion)且所有节点(循环单元)按链式连接的(recursive neural network),通过网络的内部结构捕捉序列之间的模式特征,一般也是以序列形式输出。RNN(Recurrent Neural Network) 是带有循环的神经网络。假设我们有一组向量,通过假设函数$H$解释代表时间量,是非线性函数,相对应的是每次循环的输出。

m0_71145378的博客 4094

RNN循环卷积神经网络

RNN循环卷积神经网络介绍

chase 802

CNN-LSTM-ATT:这是用于文章评分的Pytorch实现

CNN-LSTM-ATT论文评分模型 这是用于自动作文评分的纸质基于注意力的循环卷积神经网络的Pytorch实现。 [ ] 版本 我们的版本是: Python 3.6 PyTorch 1.8.0 训练 python train.py --oov嵌入--embeddding手套--embedding_dict Gloves.6B.50d.txt --embedding_dim 50 --datapath data / fold_ --prompt_id 1 请注意,您应该下载Gloves.6B.50d.txt。

循环神经网络理论知识+卷积神经网络模型

前馈神经网络多层感知器与卷积神经网络,信息按照一个方向流动信息循环流动两种循环神经网络==原始的循环神经网络和目前常用的长短时记忆网络循环神经网络指的是网络的隐含层输出又作为其自身的输入。x:hy自己可以看到循环神经网络示意图设置一个有限的循环次数,将其展开后相当于堆叠多个共享隐含层参数的前馈神经网络。tanh(z)是激活函数,与sigoid类似,值域是-1到1隐含层ht是不但与当前的输入有关,而且与上一时刻的隐含层有关递归形式的定义。记忆单元处理文本分类的问题。

Claire的博客 1419

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2357

知识的定义与分类体系详解 - 从零基础到专业理解

知识的定义与分类体系详解 - 从零基础到专业理解

engchina的专栏 4366

机器学习笔记三—卷积神经网络与循环神经网络

系列文章链接 机器学习笔记二 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章链接前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文

qq_45193988的博客 5092

Power Bi数据分析案例:在线零售平台销售数据分析

该数据集为,涵盖2023年1月至2024年3月,包含用户群体特征、购买行为、产品偏好以及参与度指标。用户维度:Customer_ID,Age,Gender,City产品维度:Product_Category,Unit_Price事实表:Order_ID,Quantity,Total_Amount,Discount_Amount,Rating,Delivery_Time在Power Query当中处理销售日期列,并新增年龄段、浏览页面分段列。

2301_79586168的博客 1278

PyTorch学习(十)RNN回归

RNN回归 import torch import torch.nn as nn from torch.autograd import Variable import torch.utils.data as Data import torchvision import numpy as np import matplotlib.pyplot as plt torch.manual_seed(1) # reproducible TIME_STEP=10#考虑多少时间点的数据, INPUT_SI

qq_44627776的博客 373

C# 异步编程详解(Task,async/await)

同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。

luxingyu329的博客 4154

nRF24L01模块性能调优笔记:基于STC8H的SPI通信,如何突破700包/秒的传输瓶颈?

本文详细介绍了如何通过SPI通信优化、nRF24L01寄存器配置和STC8H系统级调优,突破700包/秒的传输瓶颈。从硬件设计到软件实现,提供了一套完整的性能调优方案,特别适合需要高性能无线通信的嵌入式开发者。

weixin_42525211的博客 181

从零开始学Pytorch(十)之循环神经网络基础

本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量HHH,用HtH_{t}Ht​表示HHH在时间步ttt的值。HtH_{t}Ht​的计算基于XtX_{t}Xt​和Ht−1H_{t-1}Ht−1​,可以认为HtH_{t}Ht​记录了到当前字符为止的序列信息,利用HtH_{t}Ht​对序列的下...

Wenrui Xie的博客 905

GD32F303串口DMA发送数据避坑指南:为什么你的发送函数会卡住?

本文深入解析GD32F303单片机串口DMA发送数据时常见的卡死问题,提供详细的避坑指南。从DMA传输完成中断时序、发送状态管理到双通道DMA的特别注意事项,全面剖析问题根源并给出解决方案,帮助开发者构建健壮的DMA发送机制。

weixin_27038245的博客 295

【PyTorch深度学习十】RNN和GRU的输入与输出

Pytorch深度学习实践

H的个人主页 699

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3034

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)

0. 专栏导读 1. 普通柱状图 2. 簇状柱形图 3. 堆积柱形图 4. 横向柱状图 5. 横向双向柱状图 6. 百分比堆积柱形图 7. 3D柱形图 8. 3D堆积柱形图 9. 3D百分比堆积柱形图

努力让自己发光,对的人才能迎着光而来 2万+

Pytorch循环神经网络(RNN)快速入门与实战

0. 前言 很久没用过Pytorch,忘得差不多了,最近课题需要用,所以整理一下RNN的使用方法。记得去年学这部分一直很迷糊,所以希望这篇博客能对大家有所帮助。 1. 简单循环神经网络结构 先简单聊聊RNN的结构。最简单的一层RNN网络结构如下图所示,其中,每个箭头都表示一个权值,输入为向量X=[x1,x2,...,xT]X=[x_1,x_2,...,x_T]X=[x1​,x2​,...,xT​],输出向量为Y=[y1,y2,...,yT]Y=[y1,y2,...,y_T]Y=[y1,y2,...,yT​]

热爱技术,热爱生活! 6万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

liaomin416100569的专栏 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

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

【PyTorch】深度学习实践之 RNN基础篇——实现RNN

深度学习实践之 RNN基础篇——实现RNN,one-hot向量、LSTM,GRU

zoetu 1万+

【NLP】RNN理解(Pytorch实现)

【参考:【循环神经网络】5分钟搞懂RNN,3D动画深入浅出_哔哩哔哩_bilibili】 参数理解 上面这张图最能表明RNN的运行原理 【参考:pytorch中RNN参数的详细解释_lwgkzl的博客-优快云博客】 自己的笔记 【参考:【PyTorch深度学习实践 | 刘二大人】B站视频教程笔记_myaijarvis的博客-优快云博客】 多层、双向RNN 【参考:循环神经网络的改进:多层RNN、双向RNN与预训练_DeepGeGe的博客-优快云博客】 ...

myaijarvis notebook 3502

Pytorch 第十一回:循环神经网络——RNN模型

本次开启深度学习第十一回,基于Pytorch的RNN循环神经网络模型。前面我们已经分享过线性神经网络、多层神经网络和卷积神经网络。接下来,开始学习循环神经网络。本回分享的第一个循环神经网络,叫做RNN模型。在本回中,设计通过RNN模型来对股票收盘价格进行预测。接下来给大家分享具体思路。 本次学习,借助的平台是PyCharm 2024.1.3,python版本3.11 numpy版本是1.26.4,pytorch版本2.0.0+cu118,d2l的版本是1.0.3

zhuwenlong130130的博客 6870

循环神经网络RNN完全解析:从基础理论到PyTorch实战

在本文中,我们深入探讨了循环神经网络(RNN)及其高级变体,包括长短时记忆网络(LSTM)、门控循环单元(GRU)和双向循环神经网络(Bi-RNN)。文章详细介绍了RNN的基本概念、工作原理和应用场景,同时提供了使用PyTorch构建、训练和评估RNN模型的完整代码指南。

TechLead 2895

PyTorch学习系列教程:循环神经网络【RNN】

注:RNN既用于表达循环神经网络这一类网络,也用于表达标准RNN模块。

AAI666666的博客 3487

pytorch- RNN循环神经网络

pytorch RNN循环神经网络

wyw0000的博客 1823

PyTorch 循环神经网络(RNN)

循环神经网络(Recurrent Neural Networks, RNN)是一类神经网络架构,专门用于处理序列数据,能够捕捉时间序列或有序数据的动态信息,能够处理序列数据,如文本、时间序列或音频。RNN 在自然语言处理(NLP)、语音识别、时间序列预测等任务中有着广泛的应用。RNN 的关键特性是其能够保持隐状态(hidden state),使得网络能够记住先前时间步的信息,这对于处理序列数据至关重要。

qq_25502783的博客 1403

PyTorch-RNN循环神经网络实现分类-回归

一、RNN 1.1 简介 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 对循环神经网络的研究始于二十世纪80-90年代,并在二十一世纪初发展为深度学习(deep learning)算法之一 [2] ,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(

3505
上一篇: pytorch(九)卷积神经网络
下一篇: 理解感受野
@@老胡
博客等级 码龄7年 291粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值