Cogito-V1-Preview-Llama-3B LSTM时间序列预测模型原理与代码实现详解

news2026/4/27 11:44:44
Cogito-V1-Preview-Llama-3B LSTM时间序列预测模型原理与代码实现详解1. 引言时间序列预测简单来说就是根据过去的数据猜一猜未来会发生什么。这事儿听起来挺玄乎但其实我们每天都在做。比如看看天气预报就是基于过去的气象数据来预测明天的天气看看股票走势图也是想从过去的波动里找到未来的蛛丝马迹。传统的统计方法像ARIMA在处理这类问题上已经很有年头了。但有时候数据之间的关系特别复杂不是简单的线性规律能说清楚的。这时候深度学习模型特别是长短期记忆网络就派上了大用场。你可能听说过循环神经网络它擅长处理序列数据比如文本、语音。但RNN有个“健忘症”的毛病对于很长的序列它容易忘记很早之前的信息。LSTM就是为了解决这个问题而生的它内部有个精巧的“记忆单元”能选择性地记住重要的信息忘掉不重要的就像一个自带记事本和橡皮擦的聪明大脑。今天我们就借助Cogito-V1-Preview-Llama-3B模型的讲解和代码生成能力来把LSTM这个“黑盒子”彻底拆开看看。我们会从最基础的原理讲起用大白话和图示帮你理解它到底是怎么工作的然后手把手带你用代码实现一个股票价格预测的案例。整个过程就像搭积木一样从理解每一块积木的作用到最终搭建出一个能工作的模型。2. LSTM一个会“选择性记忆”的神经网络2.1 从RNN的“健忘症”说起要理解LSTM我们先看看它的前身——循环神经网络。你可以把RNN想象成一个非常专注但记性不太好的人。他每次只处理当前的信息并且会把处理后的结果一种“记忆”传递给下一个时刻的自己。问题就出在这个“记忆”上。当序列很长时比如一段几百字的文章信息在传递过程中会不断被稀释、变形。到了后面RNN可能已经完全忘记了文章开头讲了什么。这种现象在技术上被称为“梯度消失”或“梯度爆炸”导致RNN难以学习到长距离的依赖关系。2.2 LSTM的“记忆细胞”核心设计LSTM的发明者很聪明他们给RNN加了一个叫做“细胞状态”的东西。你可以把它想象成一条传送带它贯穿整个时间线。信息可以在这条传送带上平稳地流动几乎不受干扰。LSTM的关键在于它有三个特殊的“门”来控制这条传送带遗忘门决定细胞状态中哪些旧信息应该被扔掉。它查看当前的输入和上一时刻的隐藏状态输出一个0到1之间的数给细胞状态的每个部分。0代表“完全忘记”1代表“完全保留”。输入门决定哪些新信息应该被存放到细胞状态里。它有两部分一部分是一个sigmoid层决定要更新哪些值另一部分是一个tanh层创建一个新的候选值向量这些值可能会被加入到细胞状态中。输出门基于当前的细胞状态决定最终要输出什么。首先用一个sigmoid层决定细胞状态的哪些部分将要被输出。然后让细胞状态通过tanh函数将其值压到-1和1之间再乘以sigmoid门的输出这样就得到了最终的隐藏状态输出。这三个门协同工作使得LSTM能够精细地控制信息的流动实现长期记忆。2.3 一张图看懂LSTM内部运作下面这张图清晰地展示了LSTM在一个时间步内的计算流程。跟着箭头走你就能明白数据是如何在遗忘门、输入门、细胞状态和输出门之间流转的。图示一个标准的LSTM单元结构图包含C_{t-1}上一时刻细胞状态、h_{t-1}上一时刻隐藏状态、x_t当前输入流向遗忘门f_t、输入门i_t和候选状态~C_t、输出门o_t最终得到C_t新细胞状态和h_t新隐藏状态。图中标明了sigmoid和tanh激活函数以及乘法和加法操作。简单来说h_{t-1}和x_t一起告诉三个门该怎么工作。遗忘门决定从旧记忆C_{t-1}中擦掉什么输入门决定把哪些新信息写进新记忆C_t输出门则决定从新记忆C_t中读出什么作为当前时刻的输出h_t。3. 为什么是LSTM对比看看就知道光说LSTM好可能不够直观。我们把它和另外两种常见的网络结构放在一起对比它的优势就一目了然了。特性对比前馈神经网络经典RNNLSTM数据理解独立看待每个数据点不考虑顺序。考虑数据的前后顺序有“记忆”概念。考虑顺序且有长期记忆能力。输入输出固定长度的输入产生固定长度的输出。可以处理变长序列输入输出长度灵活。可以处理变长序列输入输出长度灵活。记忆能力无记忆。处理当前输入与过去输入无关。短期记忆。对近期输入敏感长期依赖学习困难。长期记忆。通过门控机制能记住很久以前的关键信息。适用场景图像分类、房价预测等输入独立的场景。短文本情感分析、简单的时间序列预测。长文本理解、机器翻译、复杂时间序列预测如股票、天气。核心问题无法处理序列数据。梯度消失/爆炸难以学习长程依赖。结构相对复杂计算量稍大。打个比方前馈神经网络像是一个每次只回答一道独立选择题的考生。经典RNN像是一个在听故事但只能记住最后几句话的听众。LSTM则像是一个边听故事边做笔记的听众他能根据故事的重要性在笔记上划重点、做摘要即使故事很长他也能抓住核心情节。对于股票价格预测这种任务今天的价格肯定和昨天、上周甚至上个月的趋势有关。LSTM这种“做笔记”的能力让它非常适合从历史数据中捕捉那些复杂的、长期的波动模式。4. 动手实战用PyTorch实现股票价格预测理论说得再多不如动手跑一遍代码来得实在。接下来我们就用PyTorch框架搭建一个LSTM模型来预测股票价格。我们假设要预测的是股价的“收盘价”。思路是用过去N天的股价一个序列作为输入来预测下一天的收盘价。4.1 环境准备与数据概览首先确保你安装了必要的库。我们将使用yfinance来获取真实的股票数据这样我们的实验更有实感。# 导入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import yfinance as yf import torch import torch.nn as nn from torch.utils.data import DataLoader, TensorDataset from sklearn.preprocessing import MinMaxScaler # 设置随机种子保证结果可复现 torch.manual_seed(42) np.random.seed(42) # 获取股票数据 - 这里以苹果公司为例 ticker AAPL start_date 2015-01-01 end_date 2023-12-31 stock_data yf.download(ticker, startstart_date, endend_date) # 我们只关心‘Close’价格 prices stock_data[Close].values.reshape(-1, 1) # 看看数据长什么样 print(f数据形状: {prices.shape}) print(f前5天收盘价: {prices[:5].flatten()}) plt.figure(figsize(12, 6)) plt.plot(prices, labelf{ticker} Close Price) plt.title(Stock Price Over Time) plt.xlabel(Days) plt.ylabel(Price (USD)) plt.legend() plt.show()运行这段代码你会看到苹果公司股价从2015年到2023年的走势图。我们的任务就是让模型学会这条曲线的规律。4.2 数据预处理让模型更好学原始股价数字很大而且一直在增长这不利于模型训练。我们通常需要将数据“归一化”到一个小范围内比如0到1之间。同时要把数据组织成模型喜欢的“序列-标签”对。# 1. 归一化数据 scaler MinMaxScaler(feature_range(0, 1)) scaled_prices scaler.fit_transform(prices) # 2. 创建序列数据集 # 例如用过去60天的数据预测第61天 sequence_length 60 X, y [], [] for i in range(sequence_length, len(scaled_prices)): X.append(scaled_prices[i-sequence_length:i, 0]) # 过去60天的序列 y.append(scaled_prices[i, 0]) # 第61天的价格 X, y np.array(X), np.array(y) # 3. 划分训练集和测试集 (80%训练20%测试) split_idx int(len(X) * 0.8) X_train, X_test X[:split_idx], X[split_idx:] y_train, y_test y[:split_idx], y[split_idx:] # 4. 转换为PyTorch张量并调整形状为 [样本数, 序列长度, 特征数] X_train torch.FloatTensor(X_train).unsqueeze(-1) # 形状: [样本数, 60, 1] y_train torch.FloatTensor(y_train).unsqueeze(-1) X_test torch.FloatTensor(X_test).unsqueeze(-1) y_test torch.FloatTensor(y_test).unsqueeze(-1) print(f训练集形状: X_train {X_train.shape}, y_train {y_train.shape}) print(f测试集形状: X_test {X_test.shape}, y_test {y_test.shape})4.3 构建LSTM模型现在我们来定义模型的核心。PyTorch让这件事变得非常简单。class LSTMModel(nn.Module): def __init__(self, input_size1, hidden_layer_size50, output_size1): super().__init__() self.hidden_layer_size hidden_layer_size # 定义LSTM层 # batch_firstTrue 表示输入张量的第一个维度是batch_size self.lstm nn.LSTM(input_size, hidden_layer_size, batch_firstTrue) # 定义全连接输出层 self.linear nn.Linear(hidden_layer_size, output_size) def forward(self, input_seq): # LSTM层输出lstm_out 包含了每个时间步的隐藏状态 # hidden 和 cell 是最后一个时间步的隐藏状态和细胞状态 lstm_out, (hidden, cell) self.lstm(input_seq) # 我们通常只取最后一个时间步的隐藏状态来预测下一个值 predictions self.linear(lstm_out[:, -1, :]) # 取序列最后一个时间步的输出 return predictions # 初始化模型 model LSTMModel(input_size1, hidden_layer_size50, output_size1) print(model)关键参数解释input_size1每个时间步输入的特征数。我们只用收盘价所以是1。如果你加入成交量、开盘价等这个数就要增加。hidden_layer_size50这是LSTM层中隐藏神经元的数量。你可以把它理解为模型的“记忆容量”。数字越大模型能记住和学习的模式越复杂但也更容易过拟合训练更慢。50是一个常用的起点。output_size1我们只预测下一个时间点的收盘价所以输出是1。4.4 训练模型让模型从数据中学习定义好模型和损失函数我们用均方误差因为它对预测数值任务很友好就可以开始训练了。# 定义损失函数和优化器 loss_function nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr0.001) # Adam优化器学习率0.001 epochs 100 train_losses [] test_losses [] # 创建DataLoader方便批量训练 train_dataset TensorDataset(X_train, y_train) train_loader DataLoader(train_dataset, batch_size32, shuffleTrue) for epoch in range(epochs): model.train() # 设置为训练模式 epoch_train_loss 0 for batch_X, batch_y in train_loader: optimizer.zero_grad() # 清空梯度 y_pred model(batch_X) # 前向传播 loss loss_function(y_pred, batch_y) # 计算损失 loss.backward() # 反向传播计算梯度 optimizer.step() # 更新权重 epoch_train_loss loss.item() avg_train_loss epoch_train_loss / len(train_loader) train_losses.append(avg_train_loss) # 在测试集上评估 model.eval() # 设置为评估模式 with torch.no_grad(): test_pred model(X_test) test_loss loss_function(test_pred, y_test).item() test_losses.append(test_loss) if (epoch1) % 20 0: print(fEpoch [{epoch1}/{epochs}], Train Loss: {avg_train_loss:.6f}, Test Loss: {test_loss:.6f}) # 绘制训练过程中的损失变化 plt.figure(figsize(10,5)) plt.plot(train_losses, labelTraining Loss) plt.plot(test_losses, labelTesting Loss) plt.title(Model Loss During Training) plt.xlabel(Epoch) plt.ylabel(Loss) plt.legend() plt.show()观察损失曲线如果训练损失和测试损失都稳步下降并趋于平稳说明模型训练得不错。如果测试损失开始上升而训练损失还在下降那可能就是过拟合了。4.5 看看预测效果如何训练完成后我们把模型在测试集上的预测结果还原回原始的价格尺度并和真实价格画在一起对比。# 切换到评估模式进行预测 model.eval() with torch.no_grad(): train_predict model(X_train) test_predict model(X_test) # 将归一化的预测值反变换回原始价格尺度 train_predict scaler.inverse_transform(train_predict.numpy()) y_train_actual scaler.inverse_transform(y_train.numpy()) test_predict scaler.inverse_transform(test_predict.numpy()) y_test_actual scaler.inverse_transform(y_test.numpy()) # 绘制对比图 plt.figure(figsize(15, 8)) # 为了正确对齐时间我们需要偏移测试集的部分 train_size len(train_predict) sequence_length test_indices np.arange(train_size, train_size len(test_predict)) plt.plot(np.arange(len(prices)), prices, labelActual Price, alpha0.7, linewidth2) plt.plot(np.arange(sequence_length, train_size), train_predict, labelTrain Predict, alpha0.9) plt.plot(test_indices, test_predict, labelTest Predict, alpha0.9, linewidth2) plt.title(Stock Price Prediction using LSTM) plt.xlabel(Days) plt.ylabel(Price (USD)) plt.legend() plt.show()这张图是检验我们模型成败的关键。理想情况下预测曲线尤其是测试集的预测曲线应该紧紧跟随真实价格的走势。如果贴合得很好说明我们的LSTM模型确实学到了历史数据中的有效模式。5. 总结走完这一趟我们从LSTM为什么能解决RNN的“健忘症”开始拆解了它内部遗忘门、输入门、输出门三个核心部件是如何像精密仪器一样控制信息流的。通过和前馈神经网络、经典RNN的对比我们能更清楚地看到LSTM在处理序列数据尤其是长序列依赖上的独特优势。后面的实战部分我们用一个完整的股票价格预测案例把理论落到了实处。从用yfinance获取真实数据到归一化、构建序列数据集再到用PyTorch定义、训练LSTM模型最后可视化预测结果每一步都是时间序列预测任务的标准流程。你可以试着调整代码中的sequence_length观察窗口、hidden_layer_size模型复杂度等参数看看预测效果会有什么变化。比如把窗口从60天改成30天或90天或者把隐藏层神经元增加到100个感受一下这些“旋钮”对模型的影响。当然这个例子还是一个相对基础的版本。真实的量化交易系统要考虑的因素多得多比如多特征输入开盘价、最高价、成交量等、更复杂的模型结构多层LSTM、注意力机制、以及严谨的回测和风险控制。但无论如何理解并掌握LSTM这个强大的工具无疑是构建更高级时序预测模型的一块坚实基石。希望这次借助Cogito-V1-Preview-Llama-3B展开的讲解和代码实践能帮你把这个工具稳稳地放进自己的工具箱里。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…