2025-11-15 学习记录--Python-LSTM模型定义(PyTorch)

LSTM模型定义(PyTorch)

  • LSTM(Long Short-Term Memory)长短期记忆网络
    是 RNN(循环神经网络)的一种改进版本,主要用来解决 时间序列预测 或 需要记住过去信息的任务 ,例如:👇🏻
    • PM2.5 时间序列预测
    • 文本生成
    • 股票预测
    • 温度预测
    • 电力负载预测
  • 普通 RNN 的问题是运行久了就遗忘前面的信息 (梯度消失),而 LSTM 通过 "门结构(gates) " 让网络能够选择:👇🏻
    • 记住(Keep)
    • 忘掉(Forget)
    • 更新(Update)
  • 这些信息。
python 复制代码
# LSTM 模型定义(PyTorch)
# ---------------------------------------------------------
# 本文件实现一个简单的单层 LSTM 回归模型,用于预测下一小时 PM2.5。
# 输入维度: 24(窗口长度)
# 输出维度: 1(预测未来1小时 PM2.5)
# ---------------------------------------------------------

import torch  # 导入 PyTorch 主包,用于张量运算与设备管理
import torch.nn as nn  # 导入神经网络模块的子包,习惯性重命名为 nn

# 定义一个继承自 nn.Module 的 LSTM 模型类
class LSTMModel(nn.Module):
    def __init__(self, input_size=1, hidden_size=64, num_layers=1, dropout=0.0):
        super(LSTMModel, self).__init__()  # 调用父类构造函数,初始化模块内部状态

        # 定义一个 LSTM 层
        # input_size: 每个时间步的特征维度(这里每小时只有一个 PM2.5 值,所以是 1)
        # hidden_size: LSTM 隐藏态的维度(即每个时间步输出向量的长度)
        # num_layers: LSTM 堆叠层数(几层 LSTM 单元叠在一起)
        # batch_first=True: 输入/输出张量的形状为 (batch, seq_len, feature)
        # dropout: 当 num_layers>1 时,层间 dropout 的概率
        self.lstm = nn.LSTM(
            input_size=input_size,
            hidden_size=hidden_size,
            num_layers=num_layers,
            batch_first=True,
            dropout=dropout
        )

        # 定义一个线性全连接层,把 LSTM 的最后隐藏态映射为预测值
        # 输入维度 hidden_size -> 输出维度 1(回归预测一个数)
        self.fc = nn.Linear(hidden_size, 1)

    def forward(self, x):
        # forward 定义前向传播逻辑,x 是模型输入张量
        # 期望 x.shape = (batch_size, seq_len=24, feature=1)
        out, _ = self.lstm(x)  # 把输入传入 LSTM,out 为每个时间步的输出(shape=(batch, seq_len, hidden_size))
                               # 第二个返回值是 (h_n, c_n) ------ 最后一个时间步的隐状态与细胞状态,这里用 _ 忽略它

        # 取 LSTM 输出序列中最后一个时间步的输出作为序列级特征
        # out[:, -1, :] 的形状为 (batch_size, hidden_size)
        out = out[:, -1, :]

        # 把最后时间步的隐藏向量通过全连接层映射为标量预测值
        # 最终 out 的形状为 (batch_size, 1)
        out = self.fc(out)
        return out  # 返回预测结果(未做激活,回归任务通常直接输出实数)
相关推荐
芝梵家电数据笔记10 小时前
用字段表核对暖菜板长期使用条件:结构、暖区、质保边界
python·家电·数据校验·dataclass·选购
天天被压力11 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
叼烟扛炮15 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮20 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
且从容.21 小时前
VUE3学习笔记(根据黑马教程总结)
笔记·学习
蒸蒸yyyyzwd1 天前
关于 AI 开发相关的一些面经。
笔记·学习
卷无止境1 天前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋1 天前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc1 天前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂1 天前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛