RNN参数详解+实例分析

import torch
from torch import nn
import numpy as np
from torch import optim
rnn = nn.RNN(input_size=100,hidden_size=10,num_layers=2) #初始化一个RNN网络
# input_size 是一个单词或者汉字的size,比如你embedding的时候,一个单词用一个100维的向量来表示,那么你这里的input_size就是100
# hidden_size就是h的size
# num_layers就是RNN的层数,深层RNN的话,num_layers设置大一点就可以
'''
其实我觉得,可以把input_size看为原始特征个数,hidden_size就是特征提取之后的特征个数(CNN中就是feature_maps的数量)
与CNN或者一般FNN不同的是,CNN每层的feature_maps的数量可以改变,比如我最开始输入的特征数量是28*28=784
通过设置第一层的feature_maps的数量为100,我把特征个数改变到了100;再通过设置第二层的feature_maps的数量为50,我又可以把特征个数变成50...
FNN中,我设置第一层的参数矩阵的size是784*100,就把特征个数变成100;再设置第二层的参数矩阵的size是100*50,就把特征个数变成了50
但是在多层RNN中,每一层的特征个数是不变的,比如这里我原始的特征个数是100,通过第一层RNN后,我特征个数变成了10,
但是后面不管如何增加RNN的层数,我的特征个数永远都是10了,因为我的hidden_size已经固定在10了。
也就是说,除了第一层的weight_ih的size是原始特征个数*hidden_size以外,
其他层的weight_ih size都是hidden_size*hidden_size(这里没有考虑batch_size)

'''
rnn._parameters.keys()
'''
(以下关于size的讨论都没有考虑batch_size)
weight_ih代表与x相乘的参数矩阵 l0表示layer0,即第一层;在这个网络中,weight_ih_l0的size是10*100
weight_hh表示与h相乘的参数矩阵,likewise,l0表示第一层;在这个网络中,weight_hh_l0的size是10*10
bias_hh_l0表示第一层的bias,size是10
weight_ih_l1的size是10*10
weight_hh_l1的size是10*10
bias_hh_l1的size是10
'''

odict_keys(['weight_ih_l0', 'weight_hh_l0', 'bias_ih_l0', 'bias_hh_l0', 'weight_ih_l1', 'weight_hh_l1', 'bias_ih_l1', 'bias_hh_l1'])
x = torch.randn([10,3,100]) 
# 随便设一个x 可以看成每句话有10个单词,每个单词用一个100维向量表示,一共有3句话 
# 即size为[seq_len,bacth_size,embedding_size]
# 在初始化RNN时,有一个参数为batch_first,默认值为False,如果设置为True,那么input的size就应该为[batch_size,seq_len,embedding_size]
h0 = torch.zeros([2,3,10]) 
'''
初始化h0,这里我们全部初始化为0,如果不给h0的话,RNN也会随机初始化。
2表示有两层RNN,每层RNN都要有h0
3表示有3句话,或者说batch_size是3;每个句子都要有一个h0矩阵
10是hidden_size是10
'''
out,h = rnn(x,h0) #RNN输出的h是最后一个时刻的h
out.size
  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RNN(Recurrent Neural Network) 是一种递归神经网络,它能够处理序列数据,并具有记忆能力,适用于自然语言处理和时间序列数据的建模等任务。而Attention机制是一种特殊的机制,能够在RNN中关注与当前任务更相关的部分,提升模型性能。 RNN中Attention机制的引入,可以使模型在处理长序列数据时,更加关注与当前任务相关的信息。它通过计算每个输入和输出的注意力权重,将关注点放在对当前输出更有倾向的输入上。这样,就能够在翻译任务中,对于较长的句子主要关注其中最重要的单词,提高翻译质量;或在语音识别任务中,对于长音频序列更注重关键的语音片段,提高识别准确率。 CTC(Connectionist Temporal Classification)是一种用于序列分类的方法,常用于语音识别中。CTC的特点是无需对齐标签和输入,只需要输入和输出序列之间的对应关系。通过将输出序列与输入序列对齐的所有可能对应关系进行求和,最终得到最可能的输出序列。这种方法不仅可以处理单个输入序列与输出序列的对齐问题,还能够应对多对一、多对多等复杂情况。 RNN Attention CTC的结合应用在语音识别任务中。首先,RNN作为基础模型,对输入音频序列进行特征提取和语音信息的建模。其次,Attention机制用于根据当前输出的建议,选择与其最相关的输入部分进行关注。最后,CTC用于将该输出序列的所有对齐与输入的可能对应关系进行求和,得到最可能的输出序列。通过Attention机制的引入,模型可以更加关注与当前输入相关的部分,提高语音识别的准确率。 总结来说,RNN Attention CTC是一种在语音识别中常用的方法,它充分利用了RNN的记忆能力,结合Attention机制进行关注,再通过CTC进行序列分类。这种方法在序列数据处理中具有很好的效果,提高了模型的性能和准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值