Pytorch RNN爬坑指南(维数篇)

在实现RNN的时候遇到了一些问题,主要还是各种size没有搞清楚,特开一帖记录一下。

下图是pytorch中的RNN模块的原理图(图片来源见水印):
在这里插入图片描述
在PyTorch中可以使用下面两种方式去调用:

  • torch.nn.RNNCell(),只能接受序列中单步的输入,且必须传入隐藏状态
  • torch.nn.RNN(),可以接受一个序列的输入,默认会传入全0的隐藏状态,也可以自己申明隐藏状态传入
class RNN(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0., bidirectional=False):

上述RNN默认为是图中的一层隐藏层结构。

参数解释:

  • input_size:输入的 x x x的维度
  • hidden_size:隐藏层 h h h的维度
  • num_layers:隐藏层数,默认为1(即上图),若是大于1则意味着在上图中 h h h作为接续的RNN单元的输入,如下图:
    在这里插入图片描述
    当然了,这个图画的是双向RNN,咱们只看图的实线部分就可以了,num_layers大于1说的就是这种情况。但是这里似乎只能加入和h同样size的RNN单元,要想改变一下的话可能还需要自己手动实现
  • bias:偏置项
  • batch_first:在输入张量中batch放在第一位。这里的batch指我们同时扔进去多个序列。
    原本的输入:(seq_len, batch, feature),batch_first = True时的输入:(batch, seq_len, feature)

dropout和bidirectional略…

在调用RNN时,一般地:

out, h_o = RNN(input, h_i)

这里,假设没有开启baytch_first,则:

对于输入参数而言:

  • 输入的维度应该是:(seq_len, batch, input_size)
  • h的维度应该是:(num_layers * num_directions, batch, hidden_size)
    即考虑到了隐藏层数、batch和隐藏层规格

对于返回结果而言:

  • 输出的维度应该是:(seq_len, batch, num_directions * hidden_size)
  • 隐藏层的维度应该是:(num_layers * num_directions, batch, hidden_size)

举例:

rnn = nn.RNN(10, 20, 2)  
input = torch.randn(5, 3, 10)  
h0 = torch.randn(2, 3, 20)  
output, hn = rnn(input, h0)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PenguinLeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值