赞
踩
介绍一下RNN模型的结构以及源码,用作自己复习的材料。
RNN模型所对应的源码在:\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。
RNN的模型图如下:
源码注释中写道,RNN的数学公式:
表示在时刻的隐藏状态,
表示在时刻的输入,
表示前一层在时间的隐藏状态,或者是在时间“0”的初始隐藏状态。
接下来我们看一下源码中RNN类的初始化(只介绍几个重要的参数):
- torch.nn.RNN(self, input_size, hidden_size, num_layers=1,
- nonlinearity='tanh', bias=True, batch_first=False,
- dropout=0.0, bidirectional=False, device=None, dtype=None)
-
下面是输入部分:
这是Pytorch官方文档中给出的解释:
输入分为input和h_0,当没有提供h_0的时候,h_0默认为0。
当batch_size == Ture时,输入的维度一般为(batch_size * seq_len * emb_dim)。
下面是输出部分:
其中output的维度为(batch_size * seq_len * hidden_size * bidirectional)
其中bidirectional表示RNN是双向还是单向的,单向为1,双向为2。
下面使用代码举例:
- import torch
- import torch.nn as nn
- rnn1 = nn.RNN(input_size=20,hidden_size=40,num_layers=4,bidirectional=True)
- rnn2 = nn.RNN(input_size=20,hidden_size=40,num_layers=4,bidirectional=False)
- tensor1 = torch.randn(5,10,20)
- tensor2 = torch.randn(5,10,20)
- out1,h_n = rnn1(tensor1)
- out2,h_n = rnn2(tensor2)
- print(out1.shape) # torch.Size([5, 10, 80])
- print(out2.shape) # torch.Size([5, 10, 40])
可以看到当bidirectional=True时,输出的特征维度是hidden_size * 2;
可以看到当bidirectional=False时,输出的特征维度是hidden_size * 1;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。