Pytorch实现循环神经网络(一)、RNN与LSTM的结构与定义

一、RNN的结构与pytorch中实现

首先放上RNN的结构图:
在这里插入图片描述
Xt为当前时刻的输入向量,ht为当前时刻的输出向量。可以看到,RNN不同于一般的全连接层,当前时刻的输出不仅与输入有关,还与上一时刻网络的输出ht-1有关。其输入输出关系在pytorch官方文档中:
在这里插入图片描述
在pytorch中定义RNN层:torch.nn.RNN(input_size,hidden_size,num_layers,nonlinearity ,bias,batch_first ,dropout ,bidirectional )

  • input_size: 输入特征的维数feature
  • hidden_size: 隐藏层特征的维数,亦即该RNN层输出特征的维数
  • num_layers: RNN的层数,下一层网络的输入为上一层网络的输出
  • nonlinearity: ‘tanh’ or ‘relu’. Default: ‘tanh’
  • bias: 偏置项,默认为True
  • batch_first: 如果为真,则输入数据的维数为(batch_size,seq,feature);若为假,则输入数据维数为(seq,batch_size,feature)。默认为假
  • dropout: 若不为零,网络除了最后一层外依此概率进行dropout

该层的输入包含input和h_0 (默认设置batch_first=False,bidirectional=False):

  • input :输入数据维数为(seq,batch_size,feature)
  • h_0: RNN各层在0时刻的初始状态,数据维数为(num_layers,batch_size,hidden_size)

输出包含output和h_n:

  • output: 最后一层各时刻的输出,其数据维数为(seq,batch_size,hidden_size)
  • h_n: 最后时刻网络各层的输出,其数据维数为(num_layers,batch_size,hidden_size)
layer=nn.RNN(10,20,2)
input=torch.randn(5,3,10)#(seq,batch,feature)
h0=torch.randn(2,3,20)#(num_layer,batch,hidden)
output,hn=layer(input,h0)
#output.size()=(5,3,20) 
#hn.size()=(2,3,20) 

二、LSTM结构与pytorch实现

首先放上LSTM的结构示意图:
在这里插入图片描述

相比起RNN结构,LSTM每层的输出多了细胞状态向量C,在pytorch官方文档中其计算如下:
在这里插入图片描述
torch.nn.LSTM(input_size,hidden_size,num_layers,nonlinearity ,bias,batch_first ,dropout ,bidirectional)
这里各个参数的含义与torch.nn.RNN完全相同,参照RNN即可。
输入包含input,h_0,c_0:

  • input: 输入数据维数为(seq,batch_size,feature)
  • h_0: LSTM各层在0时刻的初始状态,数据维数为(num_layers,batch_size,hidden_size)
  • c_0: LSTM各层的细胞状态在0时刻的初始值,数据维数为(num_layers,batch_size,hidden_size)

输出包含output,h_n,c_n:

  • output: 最后一层各时刻的输出,其数据维数为(seq,batch_size,hidden_size)
  • h_n: 最后时刻网络各层的输出,其数据维数为(num_layers,batch_size,hidden_size)
  • c_n: 最后时刻网络各层的细胞状态,其数据维数为(num_layers,batch_size,hidden_size)
rnn=nn.LSTM(10,20,2)
input=torch.randn(5,3,10)
h0=torch.randn(2,3,20)
c0=torch.randn(2,3,20)
output,(hn,cn)=rnn(input,(h0,c0))
#output.size()=(5,3,20)
#hn.size()=(2,3,20)
#cn.size()=(2,3,20)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值