rnn时间序列预测pytorch
时间: 2023-10-03 07:06:01 浏览: 146
在PyTorch中,你可以使用循环神经网络(RNN)进行时间序列预测。以下是一个基本的RNN时间序列预测的示例代码:
首先,导入所需的库:
```python
import torch
import torch.nn as nn
import numpy as np
```
接下来,定义一个简单的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.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
out, _ = self.rnn(x)
out = self.fc(out[:, -1, :])
return out
```
然后,准备数据并定义超参数:
```python
# 假设我们有一个包含100个时间步的序列,每个时间步有5个特征
seq_length = 100
input_size = 5
hidden_size = 10
output_size = 1
# 创建随机输入序列
input_sequence = np.random.randn(seq_length, input_size)
# 创建随机目标序列(在这个示例中,我们将目标序列设置为输入序列的下一个时间步)
target_sequence = np.roll(input_sequence, -1, axis=0)
target_sequence[-1] = input_sequence[-1] # 最后一个时间步的目标序列与输入序列相同
# 将输入和目标序列转换为张量
input_tensor = torch.Tensor(input_sequence).unsqueeze(0)
target_tensor = torch.Tensor(target_sequence).unsqueeze(0)
```
接下来,创建模型并定义损失函数和优化器:
```python
model = RNN(input_size, hidden_size, output_size)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
```
然后,进行模型的训练:
```python
num_epochs = 100
for epoch in range(num_epochs):
model.train()
optimizer.zero_grad()
# 前向传播
output = model(input_tensor)
# 计算损失
loss = criterion(output, target_tensor)
# 反向传播和优化
loss.backward()
optimizer.step()
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
```
最后,使用训练好的模型进行预测:
```python
model.eval()
with torch.no_grad():
predicted_tensor = model(input_tensor)
predicted_sequence = predicted_tensor.squeeze().numpy()
```
这是一个简单的RNN时间序列预测的示例代码,你可以根据自己的数据和需求进行相应的修改和调整。
阅读全文