请使用pytorch 编写LSTM时间序列预测代码包含激活函数的配置
以下示例代码演示如何使用pytorch实现LSTM时间序列预测,包含激活函数的配置:
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子,以确保结果可重复
torch.manual_seed(1)
# 创建时间序列数据
data = np.sin(np.linspace(0, 10*np.pi, 501)) + np.random.normal(0, 0.1, 501)
# 将数据转换为PyTorch张量
data = torch.FloatTensor(data).view(-1, 1)
# 定义LSTM模型
class LSTM(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.hidden_size = hidden_size
self.lstm = nn.LSTM(input_size, hidden_size)
self.fc = nn.Linear(hidden_size, output_size)
self.sigmoid = nn.Sigmoid()
def forward(self, input):
lstm_out, _ = self.lstm(input.view(len(input), 1, -1))
output = self.fc(lstm_out.view(len(input), -1))
output = self.sigmoid(output)
return output[-1]
# 初始化模型
model = LSTM(input_size=1, hidden_size=50, output_size=1)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
optimizer.zero_grad()
output = model(data[:-1])
loss = criterion(output, data[1:])
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 使用训练好的模型进行预测
with torch.no_grad():
future = 100
pred = model(data[-future:])
pred = pred.numpy()
# 绘制预测结果
plt.figure(figsize=(12, 6))
plt.plot(data.numpy())
plt.plot(np.arange(len(data)-future, len(data)), pred, 'r')
plt.show()
在上面的代码中,我们首先创建了一个时间序列数据,然后将其转换为PyTorch张量。接下来,我们定义了一个LSTM模型,该模型包含一个LSTM层和一个全连接层,并在全连接层中使用了sigmoid激活函数。我们使用均方误差作为损失函数,并使用Adam优化器进行模型训练。在训练过程中,我们将模型应用于数据的前n-1个时间步,并将损失与数据的后n个时间步进行比较。最后,我们使用训练好的模型进行预测,并将预测结果与原始数据进行比较
原文地址: https://www.cveoy.top/t/topic/hjP8 著作权归作者所有。请勿转载和采集!