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

PyTorch中RNN的输入和输出的总结


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

RNN的输入和输出

RNN的经典图如下所示
Pytorch中对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=0 t=1 t=2
batch1 i like dog
batch2 i love coffee
batch3 i hate milk
batch4 i like music
batch5 i hate you

那么在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个字符进行前向计算迭代,得到输出。

上一篇:深度神经网络基础理解(pytorch)


下一篇:深度学习基础--多层感知机(MLP)