here是pytorch官方文档,有对每一个参数的具体描述,不过看完之后你可能还会有些问题,主要是隐藏层和输入输出层的size是怎么确定的。
以官方代码为例
import torch
import torch.nn as nn
rnn = nn.RNN(10, 20, 2)
input = torch.randn(5, 3, 10)
h0 = torch.randn(2, 3, 20)
output, hn = rnn(input, h0)
print(output.size(),hn.size())
运行结果
torch.Size([5, 3, 20]) torch.Size([2, 3, 20])
RNN(输入维度,隐藏层维度,网络层数)
在期末复习时翻看pytorch官网代码时找到了自己的错误,官网上已经给出了输入输出维度的解释,我当时没仔细看,自己理解结果全错。现在大致解释以下,等考完试再详解:
输入:句子长度 X batchsize X 输入维度
输入的隐藏层h0: 网络层数*网络方向数(如果双向就为2) X bathsize X 隐藏层维度(因为每一层网络的每一个输入都需要一个隐藏向量,正向输入和反向输入需要的隐藏层向量不一样)
输出:句子长度 X batchsize X 网络方向数(如果双向就为2)* 隐藏层维度
输出的隐藏层hn:网络层数 * 网络方向数(如果双向就为2) X batchsize X 隐藏层维度
ps: RNN()中有一个参数是batch_first – If True, then the input and output tensors are provided as (batch, seq, feature). Default: False这个表示如果你不做更改,它会默认你输入的向量形式是(句子长度,batchsize,输入维度)这个和我们一贯想的不一样,需要注意