【发布时间】: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