【问题标题】:difference in code between using nn.RNN or not是否使用 nn.RNN 的代码差异
【发布时间】:2021-09-07 23:17:46
【问题描述】:

嗨,我是 rnn 的新手,我从 pytorch 官方教程中找到了 RNN NLP FROM SCRATCH,我认为它被命名为“from scrantch”,因为它没有使用 pytorch 中的 nn 内置的 nn.RNN 类似这样的行 @ def __init__(self, input_size, hidden_size, output_size): 段中的 987654324@。那么如果使用nn.RNN,代码将如何演变?

class RNN(nn.Module):
    # implement RNN from scratch rather than using nn.RNN
    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_tensor, hidden_tensor):
        combined = torch.cat((input_tensor, hidden_tensor), 1)
        
        hidden = self.i2h(combined)
        output = self.i2o(combined)
        output = self.softmax(output)
        return output, hidden
    
    def init_hidden(self):
        return torch.zeros(1, self.hidden_size)
def train(line_tensor, category_tensor):
    hidden = rnn.init_hidden()
    
    for i in range(line_tensor.size()[0]):
        output, hidden = rnn(line_tensor[i], hidden)
        
    loss = criterion(output, category_tensor)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    return output, loss.item()

这个问题的另一个等价物是如何使用self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True) 重写代码,或者如果不可能,内部nn.RNN 结构是什么样的?

【问题讨论】:

    标签: pytorch recurrent-neural-network


    【解决方案1】:

    这个模型是指在引入autograde模块之前RNN的实现,它是RNN的纯实现。在此示例中,隐藏状态和梯度完全由图形处理。

    def init_hidden(self):
            return torch.zeros(1, self.hidden_size)
    

    上面的行初始化了隐藏状态(最初是零)。在第一步之后,我们得到output 和下一个hidden state,它们稍后会在下一步中提供。

    所有这个过程都由graph处理。

    【讨论】:

    • 嗨,我已经编辑了我的问题并补充说,我认为因为self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True) 未被使用,所以它被称为“从头开始”,所以为什么你认为它是从头开始命名的。 “自动升级模块介绍”在哪里
    • 好的,如果这个也是 rnn 的实现,我想要一个使用 self.rnn = nn.RNN(input_size, hidden_​​size, num_layers, batch_first=True) 的。
    • 你能回答吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2021-02-03
    • 2023-02-11
    相关资源
    最近更新 更多