了解Pytorch Vanilla RNN架构

时间:2019-07-20 07:39:46

标签: python-3.x pytorch recurrent-neural-network

标准解释:在原始RNN中,隐藏状态和输出的计算方式为

enter image description here

换句话说,我们从隐藏状态获取输出。

根据Wiki,RNN体系结构可以这样展开:

vani

我一直在使用的代码如下:

job['responsilities']

RNN作为“纯”前馈层:,但是今天,我从Pytorch Tutorial

看到了另一种实现

enter image description here

他们的代码就像

class Model(nn.Module):
    def __init__(self, input_size, output_size, hidden_dim, n_layers):
        super(Model, self).__init__()
        self.hidden_dim = hidden_dim
        self.rnn = nn.RNN(input_size, hidden_dim, 1)   
        self.fc = nn.Linear(hidden_dim, output_size)

    def forward(self, x):
        batch_size = x.size(0)

        out, hidden = self.rnn(x)

        # getting output from the hidden state
        out = out..view(-1, self.hidden_dim)
        out = self.fc(out)

        return out, hidden

隐藏层的计算与标准解释相同,但是输出是独立于当前隐藏状态class RNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RNN, self).__init__() self.hidden_size = hidden_size self.i2h = nn.Linear(input_size + hidden_size, hidden_size) self.i2o = nn.Linear(input_size + hidden_size, output_size) self.softmax = nn.LogSoftmax(dim=1) def forward(self, input, hidden): combined = torch.cat((input, hidden), 1) hidden = self.i2h(combined) output = self.i2o(combined) output = self.softmax(output) return output, hidden def initHidden(self): return torch.zeros(1, self.hidden_size) 计算的。

对我来说,此实现背后的数学公式是:

enter image description here

因此,此实现与原始RNN实现不同吗?

我已经使用RNN近一年了,我认为我能理解,直到今天当我看到Pytorch的这篇文章时。我现在真的很困惑。

0 个答案:

没有答案