编写一个Python程序,使用PyTorch深度学习框架实现一个循环神经网络(RNN)用于时间序列数据的预测。 要求使用PyTorch框架,构建一个RNN模型,并使用某一时间序列数据集训练模型并进行预测。要求程序能够加载数据集、训练模型并输出预测结果以及准确率等评估指标。
时间: 2024-03-12 07:47:04 浏览: 19
好的,我会为您提供RNN时间序列预测的Python程序,并使用PyTorch框架实现。以下是程序代码:
```python
import torch
import torch.nn as nn
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 加载数据集
data = pd.read_csv('your_data.csv')
data = data.iloc[:, 1:2].values
scaler = MinMaxScaler()
data = scaler.fit_transform(data)
# 划分训练集和测试集
train_size = int(len(data) * 0.8)
test_size = len(data) - train_size
train_data, test_data = data[0:train_size, :], data[train_size:len(data), :]
# 定义RNN模型
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):
h0 = torch.zeros(1, x.size(0), self.hidden_size)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :])
return out
# 定义超参数
input_size = 1
hidden_size = 32
output_size = 1
learning_rate = 0.001
num_epochs = 1000
# 定义模型、损失函数和优化器
rnn = RNN(input_size, hidden_size, output_size)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(rnn.parameters(), lr=learning_rate)
# 训练模型
for epoch in range(num_epochs):
inputs = torch.Tensor(train_data[:-1]).view(1, train_size-1, 1)
labels = torch.Tensor(train_data[1:]).view(1, train_size-1, 1)
outputs = rnn(inputs)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (epoch + 1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, num_epochs, loss.item()))
# 预测结果
rnn.eval()
with torch.no_grad():
inputs = torch.Tensor(test_data[:-1]).view(1, test_size-1, 1)
labels = torch.Tensor(test_data[1:]).view(1, test_size-1, 1)
outputs = rnn(inputs)
predicted = scaler.inverse_transform(outputs.detach().numpy())
actual = scaler.inverse_transform(labels.detach().numpy())
# 计算准确率
accuracy = np.mean(np.abs(predicted - actual) / actual)
print('Accuracy: {:.2f}%'.format((1 - accuracy) * 100))
```
请将代码中的 `your_data.csv` 替换为您自己的数据集文件名,然后运行程序即可。程序会首先加载数据集,然后使用 MinMaxScaler 对数据进行归一化处理,接着将数据集划分为训练集和测试集。然后,定义了一个 RNN 模型并指定了超参数,损失函数和优化器。接下来,程序使用训练集对模型进行训练,并输出每个 epoch 的损失值。最后,程序使用测试集对模型进行预测,并计算预测结果的准确率。
希望这个程序能够帮助到您!