以下示例代码演示如何使用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个时间步进行比较。最后,我们使用训练好的模型进行预测,并将预测结果与原始数据进行比较

请使用pytorch 编写LSTM时间序列预测代码包含激活函数的配置

原文地址: https://www.cveoy.top/t/topic/hjP8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录