RNN模型预测拥堵消散时间代码实现
时间: 2023-07-27 19:22:52 浏览: 105
以下是使用PyTorch实现RNN模型预测拥堵消散时间的示例代码:
```python
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# 定义RNN模型
class RNN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(RNN, self).__init__()
self.hidden_dim = hidden_dim
self.rnn = nn.RNN(input_dim, hidden_dim, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
h0 = torch.zeros(1, x.size(0), self.hidden_dim).to(device)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :])
return out
# 准备数据
data = np.loadtxt('traffic_data.csv', delimiter=',')
x_train = torch.tensor(data[:, :-1], dtype=torch.float32)
y_train = torch.tensor(data[:, -1:], dtype=torch.float32)
# 定义模型超参数
input_dim = x_train.shape[1]
hidden_dim = 32
output_dim = 1
learning_rate = 0.01
num_epochs = 1000
# 初始化模型和优化器
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = RNN(input_dim, hidden_dim, output_dim).to(device)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
# 训练模型
for epoch in range(num_epochs):
optimizer.zero_grad()
outputs = model(x_train.to(device))
loss = criterion(outputs, y_train.to(device))
loss.backward()
optimizer.step()
if (epoch+1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 预测结果
with torch.no_grad():
x_test = torch.tensor([[1.2, 3.4, 5.6], [2.3, 4.5, 6.7]], dtype=torch.float32)
y_pred = model(x_test.to(device))
print(y_pred.cpu().numpy())
```
其中,数据文件`traffic_data.csv`包含了历史拥堵数据和相应的拥堵消散时间。模型使用一个单层RNN和一个全连接层进行建模,并使用均方误差作为损失函数进行训练。训练完成后,可以使用训练好的模型进行拥堵消散时间的预测。
阅读全文
相关推荐
















