公式
说明
- 所有测试代码以此为准。
- 以torch0.4.1的代码为准进行debug rnn代码, 可以pip install 指定版本的torch.
从测试代码可以看到:
- num_layers相当初始化多少层rnn layer,比如此例子的
10
, - input_size表示上一层的hidden_size(例如本例子的embedding)
- hidden_size表示rnn的输出hidden_size
- batch_first简单来讲就是内存存储的问题,if batch_first=True,那么维度(batch_size, seq_length, hidden_size),否则seq_length和batch_size对调,另外cudnn底层就是seq_length放在第一位,torch底层也会根据batch_first进行转换
1. 初始化一些参数
以embedding出来为准,输出维度为: (32, 3, 30)
rnn第一步初始化hx(10, 32, 4),一共初始化了num_layer=10层,batch_size=32,hidden_size=4,白话文就是每一层rnn都有一个(32, 4)的矩阵来保存最后一个时刻(ht)的结果。
这个可以看class RNNBase(Module):
。
另外还有2个weight,2个bias的初始化。即公式中的w
和b
2. AutogradRNN
初始化参数后,调用此方法,进行rnn计算,如果支持GPU,就会使用cudnn提供好的,此处忽略这里。
1 | def AutogradRNN(mode, input_size, hidden_size, num_layers=1, batch_first=False, |
3. StackedRNN
1 |
|
4. Recurrent
1 | def Recurrent(inner, reverse=False): |
5. Recurrent中的inner:
1 | # 针对rnn |
6. 测试代码完整如下
1 | # -*- coding: utf8 -*- |
至此,前向过程完结。