pytorch实现rnn
时间: 2023-07-07 15:29:09 浏览: 101
PyTorch中可以使用torch.nn.RNN模块来实现RNN模型。以下是一个简单的RNN模型的示例代码:
```python
import torch
import torch.nn as nn
# 定义RNN模型
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)
# 定义训练数据和标签
inputs = [torch.randn(1, 3) for _ in range(5)]
labels = [torch.LongTensor([1]) for _ in range(5)]
# 初始化模型和优化器
rnn = RNN(3, 4, 2)
criterion = nn.NLLLoss()
optimizer = torch.optim.SGD(rnn.parameters(), lr=0.1)
# 训练模型
for i in range(5):
hidden = rnn.initHidden()
optimizer.zero_grad()
for j in range(len(inputs)):
output, hidden = rnn(inputs[j], hidden)
loss = criterion(output, labels[j])
loss.backward()
optimizer.step()
```
在这个示例代码中,我们定义了一个简单的RNN模型,并使用随机数据进行训练。首先我们定义了RNN类,并在`__init__`函数中定义了输入层、隐藏层和输出层的结构,以及softmax函数。在`forward`函数中,我们将输入数据和隐藏层的数据进行拼接,并分别通过i2h和i2o进行线性变换,最后通过softmax函数得到输出结果。在`initHidden`函数中,我们初始化隐藏层的数据。接着我们定义了训练数据和标签,并初始化了模型、损失函数和优化器。在训练过程中,我们循环遍历所有输入数据,每次更新隐藏层的数据,并计算损失值和梯度,并进行优化。
阅读全文