如何用 PyTorch 实现 RNN 网络
时间: 2024-05-09 10:14:36 浏览: 78
要使用 PyTorch 实现 RNN 网络,可以按照以下步骤:
1. 导入 PyTorch 库
```python
import torch
import torch.nn as nn
```
2. 定义 RNN 模型
```python
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)
```
在上面的代码中,`RNN` 类继承了 `nn.Module` 类,并定义了模型的三个部分:输入到隐藏层的线性层 `i2h`、输入到输出层的线性层 `i2o` 和 softmax 层。
3. 实例化 RNN 模型
```python
input_size = 10
hidden_size = 20
output_size = 5
rnn = RNN(input_size, hidden_size, output_size)
```
在上面的代码中,我们实例化了一个 `RNN` 类,并传入了输入大小、隐藏层大小和输出大小。
4. 定义损失函数和优化器
```python
criterion = nn.NLLLoss()
optimizer = torch.optim.SGD(rnn.parameters(), lr=0.1)
```
在上面的代码中,我们定义了损失函数和优化器。损失函数使用了负对数似然损失函数 `nn.NLLLoss()`,优化器使用了随机梯度下降优化器 `torch.optim.SGD()`。
5. 训练模型
```python
input = torch.randn(1, input_size)
hidden = torch.randn(1, hidden_size)
optimizer.zero_grad()
for i in range(100):
output, hidden = rnn(input, hidden)
target = torch.tensor([1], dtype=torch.long)
loss = criterion(output, target)
loss.backward()
optimizer.step()
```
在上面的代码中,我们使用 `torch.randn()` 生成了一个随机输入和隐藏状态,并使用 `optimizer.zero_grad()` 清除了梯度。然后我们循环 100 次,每次将输入和隐藏状态传入 RNN 模型得到输出和新的隐藏状态,并与目标值计算损失。最后使用反向传播和优化器更新模型参数。
这就是使用 PyTorch 实现 RNN 网络的基本步骤。
阅读全文