Pytorch中对RNN输入和输出的形状总结


个人对于RNN的一些总结,如有错误欢迎指出。

RNN的输入和输出

RNN的经典图如下所示

各个参数的含义
Xt: t时刻的输入,形状为[batch_size, input_dim]。对于整个RNN来说,总的X输入为[seq_len, batch_size, input_dim],具体如何理解batch_size和seq_len在下面有说明。
St: t时刻隐藏层的状态,也有时用ht表示,形状为[batch_size, hidden_size],St=f(U·Xt+W·St-1),通过W和U矩阵的映射,将embedding后的Xt和上一状态St-1转为St
Ot: t时刻的输出,Ot=g(V·St),形状为[batch_size, hidden_size],总的为输出O为[seq_len, batch_size, hidden_size]

Pytorch中的使用

Pytorch中RNN函数如下

RNN的主要参数如下

nn.RNN(input_size, hidden_size, num_layers=1, bias=True)

参数解释
input_size: 输入特征的维度,一般rnn中输入的是词向量,那么就为embedding-dim
hidden_size: 隐藏层神经元的个数,或者也叫输出的维度
num_layers: 隐藏层的个数,默认为1

output=输出O, 隐藏状态St,其中输出O=[time_step, batch_size, hidden_size],St为t时刻的隐藏层状态

理解RNN中的batch_size和seq_len

深度学习中采用mini-batch的方法进行迭代优化,在CNN中batch的思想较容易理解,一次输入batch个图片,进行迭代。但是RNN中引入了seq_len(time_step), 理解较为困难,下面是我自己的一些理解。

首先假如我有五句话,作为训练的语料。

sentences = ["i like dog", "i love coffee", "i hate milk", "i like music", "i hate you"]

那么在输入RNN之前要先进行embedding,比如one-hot encoding,容易得到这里的embedding-dim为9.

那么输入的sentences可以表示为如下方式

t=0t=1t=2
batch1ilikedog
batch2ilovecoffee
batch3ihatemilk
batch4ilikemusic
batch5ihateyou

那么在RNN的训练中。
t=0时, 输入第一个batch[i, i, i, i, i]这里用字符表示,其实应该是对应的one-hot编码。
t=1时,输入第二个batch[like, love, hate, like, hate]
t=2时,输入第三个batch[dog, coffee, milk, music, you]
那么对应的时间t来说,RNN需要对先后输入的batch_size个字符进行前向计算迭代,得到输出。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值