莱芜警方网站官网,google关键词推广,wordpress 个人站,数据库网站开发工具介绍一下RNN模型的结构以及源码#xff0c;用作自己复习的材料。
RNN模型所对应的源码在#xff1a;\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。
RNN的模型图如下#xff1a; 源码注释中写道#xff0c;RNN的数学公式#xff1a; 表示在时刻的隐藏状态…介绍一下RNN模型的结构以及源码用作自己复习的材料。
RNN模型所对应的源码在\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。
RNN的模型图如下 源码注释中写道RNN的数学公式 表示在时刻的隐藏状态
表示在时刻的输入
表示前一层在时间的隐藏状态或者是在时间“0”的初始隐藏状态。
接下来我们看一下源码中RNN类的初始化只介绍几个重要的参数
torch.nn.RNN(self, input_size, hidden_size, num_layers1, nonlinearitytanh, biasTrue, batch_firstFalse, dropout0.0, bidirectionalFalse, deviceNone, dtypeNone)
input_size输入数据中的特征数可以理解为嵌入维度 embedding_dim。hidden_size处于隐藏状态 h 的特征数可以理解为输出的特征维度。num_layers代表着RNN的层数默认是1层当该参数大于零时又称为多层RNN。bidirectional即是否启用双向RNN默认关闭。
下面是输入部分 这是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_size20,hidden_size40,num_layers4,bidirectionalTrue)
rnn2 nn.RNN(input_size20,hidden_size40,num_layers4,bidirectionalFalse)
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])
可以看到当bidirectionalTrue时输出的特征维度是hidden_size * 2
可以看到当bidirectionalFalse时输出的特征维度是hidden_size * 1