GRU pycharm代码
时间: 2023-06-21 10:09:07 浏览: 90
以下是使用 PyTorch 实现 GRU 模型的示例代码:
```python
import torch
import torch.nn as nn
class GRU(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size):
super(GRU, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.gru = nn.GRU(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x, h0):
out, h = self.gru(x, h0)
out = self.fc(out[:, -1, :])
return out, h
```
在上述代码中,我们定义了一个名为 GRU 的类,它继承了 PyTorch 的 nn.Module 类。在该类的构造函数中,我们定义了 GRU 模型的基本结构,即输入大小、隐藏层大小、层数和输出大小。我们使用 PyTorch 中的 nn.GRU 类来创建 GRU 层,并使用 nn.Linear 类创建全连接层。在前向传播函数 forward 中,我们首先使用 GRU 层处理输入 x 和初始隐藏状态 h0,然后将最后一个时间步的输出传入全连接层进行分类。
下面是一个使用上述 GRU 模型进行训练和评估的示例:
```python
# 定义超参数
input_size = 10
hidden_size = 20
num_layers = 2
output_size = 1
learning_rate = 0.01
num_epochs = 10
# 创建模型、损失函数和优化器
model = GRU(input_size, hidden_size, num_layers, output_size)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# 训练模型
for epoch in range(num_epochs):
for i, (inputs, labels) in enumerate(train_loader):
# 前向传播
outputs, _ = model(inputs, None)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 10 == 0:
print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, len(train_loader), loss.item()))
# 评估模型
with torch.no_grad():
correct = 0
total = 0
for inputs, labels in test_loader:
outputs, _ = model(inputs, None)
predicted = torch.round(outputs)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the model on the test set: {} %'.format(100 * correct / total))
```
在上述代码中,我们首先定义了超参数,包括输入大小、隐藏层大小、层数、输出大小、学习率和训练轮数。然后,我们创建了 GRU 模型、损失函数和优化器。在训练循环中,我们对每个 mini-batch 执行前向传播、损失计算、反向传播和优化。在测试循环中,我们计算模型在测试集上的准确率。
阅读全文