lstm时间序列pytorch代码
时间: 2025-07-04 15:16:24 浏览: 3
### 使用 PyTorch 实现 LSTM 进行时间序列预测
为了展示如何利用 PyTorch 中的 LSTM 来处理时间序列数据,下面提供了一个完整的代码实例。这段代码不仅涵盖了模型定义部分,还包括了训练过程以及对未来数据点做出预测的部分。
#### 定义 LSTM 模型结构
```python
import torch
from torch import nn
class LSTM(nn.Module):
def __init__(self, input_size=1, hidden_layer_size=100, output_size=1):
super().__init__()
self.hidden_layer_size = hidden_layer_size
self.lstm = nn.LSTM(input_size, hidden_layer_size)
self.linear = nn.Linear(hidden_layer_size, output_size)
def forward(self, input_seq):
lstm_out, _ = self.lstm(input_seq.view(len(input_seq), 1, -1))
predictions = self.linear(lstm_out.view(len(input_seq), -1))
return predictions[-1]
```
此段代码创建了一个简单的 LSTM 网络架构,其中包含了单层 LSTM 单元和线性变换来映射隐藏状态到输出尺寸[^2]。
#### 准备训练函数
```python
def train_model(model, training_data, epochs, learning_rate):
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
for epoch in range(epochs):
model.train()
for seq_true in training_data:
optimizer.zero_grad()
seq_true = torch.FloatTensor(seq_true)
seq_pred = model(seq_true[:-1])
loss = loss_function(seq_pred, seq_true[-1])
loss.backward()
optimizer.step()
```
这里设置了均方误差作为损失函数,并选择了 Adam 优化器来进行梯度下降更新操作。每次迭代都会清零之前的梯度信息并通过反向传播调整参数以最小化当前批次上的平均平方差[^3]。
#### 执行未来预测
当完成上述准备工作之后就可以调用 `model.eval()` 方法切换至评估模式并执行如下所示的时间序列外推逻辑:
```python
fut_pred = 12 # 要预测多少个未来的值
test_inputs = dataset[-train_window:].tolist() # 初始化测试输入列表
for i in range(fut_pred):
seq = torch.FloatTensor(test_inputs[-train_window:])
with torch.no_grad():
model.hidden = (
torch.zeros(1, 1, model.hidden_layer_size),
torch.zeros(1, 1, model.hidden_layer_size)
)
test_inputs.append(model(seq).item())
```
该片段展示了如何通过给定的历史观测值逐步构建新的时间戳直到达到所需的预报长度为止[^1]。
阅读全文
相关推荐


















