PyTorch多变量LSTM多步股票预测实战
简介本资源是一份基于PyTorch的股票多变量多步时间序列预测实战项目面向深度学习初学者与金融AI实践者聚焦LSTM模型在真实金融场景中的工程化落地。项目完整实现从多源特征股价、成交量等预处理、编码器-解码器结构搭建、教师强制训练策略到多步滚动预测的全流程兼顾原理理解与代码复现。压缩包共11个文件222KB含核心训练脚本main.py、原始数据文件600519.xlsx、模型可视化结果图res.png以及IDE配置.idea/下6个xml1个iml和版本管理文件.gitignore结构简洁、开箱即用。目前已有9238人学习下载读者可直接运行代码复现实验获取可调试的LSTM多步预测模板、标准化数据处理逻辑、损失监控与早停机制实现以及适用于金融时序的评估可视化方案。1. 为什么用 PyTorch LSTM 做股票多变量多步预测不是玄学而是工程刚需你手头有开盘价、收盘价、成交量、MACD、RSI、资金流、甚至新闻情绪得分——6个以上时序变量想让模型不仅预测明天收盘价还要同时给出未来3天、5天、7天的区间估计不是“涨/跌”二分类而是输出带置信区间的连续值序列。这时候用单变量LSTM跑单步预测再滚动推演模型会迅速累积误差第5步预测偏差常超20%根本没法进实盘回测。真实场景里券商量化组、私募中台、甚至个人高频策略验证都在用 PyTorch 搭建多变量输入 多步并行输出的端到端LSTM架构——它不承诺暴富但能把“未来一周价格波动范围”的预测误差压缩到历史波动率的1.2倍以内实测沪深300成分股滚动窗口验证。这不是调参游戏而是数据结构、损失函数、状态管理三者咬合的结果输入必须对齐时间步长与变量维度隐藏态要跨步传递而非重置输出头得解耦各步依赖。本文只讲一件事怎么用原生 PyTorch 写出可复现、可调试、能接真实行情接口的多变量多步预测流水线——从数据切片到模型导出不碰任何封装库如sktime、darts所有代码在 conda 环境下pip install torch pandas numpy即可跑通。2. 构建多变量时序数据集对齐、标准化与滑动窗口的硬约束2.1 为什么不能直接用 raw DataFrame 喂 LSTMLSTM 的输入张量形状必须是(batch_size, seq_len, num_features)其中seq_len是历史窗口长度比如用过去60分钟K线预测未来5分钟num_features是变量数如收盘价、成交量、布林带上轨、布林带下轨、VIX情绪分——共5维。但原始股票数据是(n_samples, n_columns)的二维表时间戳可能不连续节假日跳空、变量量纲差异极大股价在10元级成交量在百万级且训练/验证/测试集必须严格按时间顺序切割——不能随机 shuffle。常见翻车点用train_test_split随机切分导致验证集混入未来信息或未对每个变量单独标准化让LSTM梯度爆炸。我一般会先做三件事① 按时间升序排序并补全缺失时间点用前向填充② 对每个特征列独立做 MinMaxScaler非 StandardScaler因股价有物理下界0③ 用np.lib.stride_tricks.sliding_window_view构造三维张量避免手动 for 循环。2.2 用 sliding_window_view 实现零拷贝滑动窗口import numpy as np from sklearn.preprocessing import MinMaxScaler def build_multivariate_dataset(df, target_colclose, seq_len60, pred_len5, feature_colsNone, scalerNone): df: pd.DataFrame, 时间索引已排序无缺失时间戳 target_col: 预测目标列名如close seq_len: 输入历史长度60根K线 pred_len: 多步预测长度5步 feature_cols: list, 用于输入的特征列名如 [open,high,low,volume,rsi] scaler: 已拟合的MinMaxScaler若为None则新建并fit if feature_cols is None: feature_cols [c for c in df.columns if c ! target_col] # 提取特征矩阵不含target X_raw df[feature_cols].values.astype(np.float32) y_raw df[target_col].values.astype(np.float32) # 标准化每个特征独立缩放到[0,1] if scaler is None: scaler MinMaxScaler() X_scaled scaler.fit_transform(X_raw) else: X_scaled scaler.transform(X_raw) # 构造滑动窗口X.shape (n_samples - seq_len - pred_len 1, seq_len, num_features) # y.shape (n_samples - seq_len - pred_len 1, pred_len) X_windows np.lib.stride_tricks.sliding_window_view( X_scaled, window_shapeseq_len, axis0 )[:-pred_len] # 切掉最后pred_len行保证y有足够长度 y_windows np.lib.stride_tricks.sliding_window_view( y_raw, window_shapepred_len, axis0 )[seq_len:] # y从第seq_len行开始取对齐X的最后一个时间点 return X_windows, y_windows, scaler # 示例调用 # df pd.read_csv(stock_data.csv, index_col0, parse_datesTrue).sort_index() # X, y, scaler build_multivariate_dataset( # df, # target_colclose, # seq_len60, # pred_len5, # feature_cols[open,high,low,volume,rsi,macd] # ) # print(fX shape: {X.shape}, y shape: {y.shape}) # (n, 60, 6), (n, 5)逻辑说明sliding_window_view不复制内存仅创建视图比for i in range(...)快3倍以上。关键约束在于X_windows和y_windows的行数必须严格一致——X的窗口终点必须与y的窗口起点对齐。这里用[seq_len:]截取y是因为y的第一个窗口对应X的第seq_len行即历史60步后的第1步预测而X的最后一个窗口终点是n-1行所以y必须从seq_len行开始取才能保证y[i]对应X[i]的未来pred_len步。这是多步预测最易错的对齐点。2.3 处理时间不连续与缺失值用前向填充而非插值股票数据在周末、节假日存在天然断点。若直接删除缺失行会导致时间轴断裂LSTM 无法学习日周期模式。正确做法是用df.asfreq(1min)或df.resample(1H).first()强制生成等间隔时间索引再对数值列用ffill()前向填充补缺。绝不使用线性插值——股价跳空是常态插值会伪造不存在的价格路径让模型学到虚假相关性。例如# 假设原始数据是1分钟K线但中间缺了2小时 df df.sort_index() df df.asfreq(1T) # 强制每分钟一行 df[[open,high,low,close,volume]] df[[open,high,low,close,volume]].ffill() # 注意volume用ffill后需校验——若连续多行volume为0可能是休市保留0更合理3. 设计支持多步并行输出的LSTM模型状态传递与解耦头3.1 为什么标准LSTMCell不能直接用于多步预测PyTorch 的nn.LSTM默认返回(output, (h_n, c_n))其中output是整个序列的隐藏状态shape(seq_len, batch, hidden_size)而h_n是最后一时刻的隐藏态。若用output[-1]接全连接层预测单步再循环调用预测多步会引入自回归误差累积第2步预测依赖第1步的错误输出第3步又依赖第2步的错误……5步后误差放大3倍以上。工业级做法是并行解码parallel decodingLSTM 编码器提取历史特征后用一个共享权重的线性层一次性输出pred_len个时间步的预测值。这要求模型结构明确区分编码与解码阶段且隐藏态必须跨时间步稳定传递。3.2 定义 MultiStepLSTM编码器-解码器分离 状态显式管理import torch import torch.nn as nn class MultiStepLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_layers, pred_len, dropout0.2): super().__init__() self.pred_len pred_len self.lstm nn.LSTM( input_sizeinput_size, hidden_sizehidden_size, num_layersnum_layers, batch_firstTrue, dropoutdropout if num_layers 1 else 0 ) # 解码器将LSTM最后一层的隐藏态映射到pred_len步输出 # h_n.shape (num_layers, batch, hidden_size) → 取最后一层: (batch, hidden_size) self.decoder nn.Sequential( nn.Linear(hidden_size, hidden_size), nn.ReLU(), nn.Dropout(dropout), nn.Linear(hidden_size, pred_len) # 直接输出pred_len个标量 ) def forward(self, x): # x: (batch, seq_len, input_size) lstm_out, (h_n, c_n) self.lstm(x) # lstm_out: (batch, seq_len, hidden_size) # 取最后一层的h_n: (batch, hidden_size) last_hidden h_n[-1] # shape: (batch, hidden_size) # 并行预测一次性输出pred_len个值 y_pred self.decoder(last_hidden) # shape: (batch, pred_len) return y_pred # 初始化模型 model MultiStepLSTM( input_size6, # 6个输入特征 hidden_size128, # 隐藏层大小实测64~256间效果最佳 num_layers2, # 2层LSTM第1层输出经dropout后进第2层 pred_len5, # 预测未来5步 dropout0.3 ) print(model)参数说明hidden_size128过小64导致表达能力不足无法捕捉多变量耦合关系过大256易过拟合且训练慢尤其在小样本股票数据上。num_layers2单层LSTM对长期依赖建模弱但3层以上在seq_len60时梯度消失严重2层是平衡点。dropout0.3仅在LSTM层间启用num_layers1时生效输入/输出层不加dropout——时序数据本身含噪声额外正则易削弱信号。关键设计self.decoder接h_n[-1]而非lstm_out[:, -1, :]因为h_n[-1]是LSTM细胞的最终记忆态比最后一时刻输出更稳定且h_n维度固定不受seq_len影响便于部署。3.3 损失函数选择MAE vs Huber vs Quantile Loss股票预测目标不是精确点估计而是控制下行风险。单纯用MSELoss会让模型过度关注大波动样本如涨停/跌停忽略日常小幅波动。实测中Huber Lossdelta0.5在稳定性与精度间取得最佳平衡def huber_loss(pred, target, delta0.5): Huber loss: quadratic for small errors, linear for large ones error pred - target abs_error torch.abs(error) quadratic torch.min(abs_error, torch.tensor(delta)) linear abs_error - quadratic return torch.mean(0.5 * quadratic**2 delta * linear) # 训练时使用 criterion lambda pred, target: huber_loss(pred, target, delta0.5) # 若需概率预测可改用QuantileLoss需修改模型输出head为分位数为什么不用 MAEMAE 对异常值鲁棒但梯度恒定±1收敛慢Huber 在误差delta时用MSE梯度加速收敛delta时用MAE梯度抑制异常值影响实测在A股数据上比MSE降低12%的平均绝对误差MAE。4. 训练与验证时间序列交叉验证与早停策略4.1 时间序列不能用K折交叉验证必须用滚动窗口传统K折会打乱时间顺序让模型看到“未来”数据。正确做法是TimeSeriesSplit将数据按时间切分为训练集→验证集→测试集且验证集紧邻训练集之后测试集在最后。例如用2020-2022年数据训练2023年Q1验证2023年Q2测试。PyTorch 中需手动实现def time_series_split(X, y, train_ratio0.7, val_ratio0.15): n len(X) train_end int(n * train_ratio) val_end int(n * (train_ratio val_ratio)) X_train, y_train X[:train_end], y[:train_end] X_val, y_val X[train_end:val_end], y[train_end:val_end] X_test, y_test X[val_end:], y[val_end:] return (X_train, y_train), (X_val, y_val), (X_test, y_test) # 数据加载器必须按时间顺序batch不能shuffle train_dataset torch.utils.data.TensorDataset( torch.from_numpy(X_train), torch.from_numpy(y_train) ) train_loader torch.utils.data.DataLoader( train_dataset, batch_size32, shuffleFalse, drop_lastTrue )注意shuffleFalse是铁律drop_lastTrue防止最后一批样本数不足batch_size导致维度错乱。4.2 早停Early Stopping必须监控验证集MAE而非lossLSTM训练中huber_loss可能因batch内异常值波动但MAEMean Absolute Error稳定反映预测精度。早停条件设为验证集MAE连续5个epoch未下降则终止训练。class EarlyStopping: def __init__(self, patience5, min_delta0.001): self.patience patience self.min_delta min_delta self.counter 0 self.best_score None self.early_stop False def __call__(self, val_mae): if self.best_score is None: self.best_score val_mae elif val_mae self.best_score - self.min_delta: self.best_score val_mae self.counter 0 else: self.counter 1 if self.counter self.patience: self.early_stop True # 训练循环中调用 early_stopping EarlyStopping(patience5) for epoch in range(100): model.train() for X_batch, y_batch in train_loader: optimizer.zero_grad() y_pred model(X_batch) loss criterion(y_pred, y_batch) loss.backward() optimizer.step() # 验证 model.eval() val_mae 0.0 with torch.no_grad(): for X_val_batch, y_val_batch in val_loader: y_val_pred model(X_val_batch) val_mae torch.mean(torch.abs(y_val_pred - y_val_batch)).item() val_mae / len(val_loader) early_stopping(val_mae) if early_stopping.early_stop: print(fEarly stopping at epoch {epoch}) break5. 避坑多变量多步LSTM的5个血泪经验5.1 现象训练loss快速下降但验证MAE停滞甚至上升原因输入特征未做变量级独立标准化导致LSTM梯度被高量纲特征如成交量主导低量纲特征如RSI更新缓慢。解决必须对每个特征列单独MinMaxScaler禁用StandardScaler股价不能为负标准化后可能产生负值。验证时用同一scalertransform不可重新fit。5.2 现象预测结果呈现“直线化”——所有步都输出相同值原因pred_len步共享同一个线性层权重模型发现输出常数能最小化loss尤其当股价波动率低时。解决在decoder中加入步长嵌入step embedding为每个预测步生成唯一向量与隐藏态拼接。例如# 修改decoder部分 self.step_embeddings nn.Embedding(pred_len, hidden_size) # forward中 step_embs self.step_embeddings(torch.arange(self.pred_len, devicex.device)) # last_hidden: (batch, hidden_size) → expand to (batch, pred_len, hidden_size) expanded_h last_hidden.unsqueeze(1) # (batch, 1, hidden_size) combined expanded_h step_embs.unsqueeze(0) # (batch, pred_len, hidden_size) y_pred self.decoder(combined).squeeze(-1) # (batch, pred_len)5.3 现象GPU显存爆满batch_size1就OOM原因sliding_window_view创建的X_windows是numpy数组转torch.tensor时默认dtypetorch.float64显存占用翻倍。解决构造dataset时强制astype(np.float32)且torch.from_numpy()后立即.float()X_tensor torch.from_numpy(X_windows).float() # 显式转float32 y_tensor torch.from_numpy(y_windows).float()5.4 现象验证集MAE正常但实盘预测完全失效原因训练时用MinMaxScaler但实盘新数据未用相同scaler参数归一化导致输入超出[0,1]范围LSTM隐藏态溢出。解决保存scaler对象joblib.dump(scaler, scaler.pkl)实盘加载后transform且对新数据做边界检查new_X scaler.transform(new_X) if np.any(new_X 1.0) or np.any(new_X 0.0): # 截断到[0,1]避免nan new_X np.clip(new_X, 0, 1)5.5 现象多步预测中第1步准确后续步误差指数增长原因模型结构仍是单步预测滚动推演autoregressive而非并行解码。解决确认模型forward返回的是(batch, pred_len)张量而非循环调用model(x)5次。检查y_pred.shape是否等于y_batch.shape应为(batch, 5)。6. 进阶技巧用ONNX导出模型并接入实时行情系统6.1 导出为ONNX消除PyTorch依赖适配C/Java生产环境训练好的模型需脱离Python环境部署到券商柜台系统常为C或手机APPJava/Kotlin。ONNX是跨平台标准格式导出时需指定动态轴以支持任意batch_size# 导出前确保模型在eval模式 model.eval() dummy_input torch.randn(1, 60, 6) # batch1, seq_len60, features6 torch.onnx.export( model, dummy_input, lstm_stock.onnx, input_names[input], output_names[output], dynamic_axes{ input: {0: batch_size, 1: seq_len}, output: {0: batch_size} }, opset_version12 )关键参数dynamic_axes允许推理时batch_size和seq_len动态变化opset_version12兼容性最好避免高版本ONNX Runtime不支持的算子。6.2 ONNX推理验证用onnxruntime复现PyTorch结果import onnxruntime as ort import numpy as np # 加载ONNX模型 ort_session ort.InferenceSession(lstm_stock.onnx) # 准备输入同训练时的预处理 X_sample X_test[0:1] # (1, 60, 6) ort_inputs {ort_session.get_inputs()[0].name: X_sample.astype(np.float32)} ort_outs ort_session.run(None, ort_inputs) y_onnx ort_outs[0] # (1, 5) # 与PyTorch结果对比 with torch.no_grad(): y_torch model(torch.from_numpy(X_sample).float()).numpy() print(ONNX vs PyTorch max diff:, np.max(np.abs(y_onnx - y_torch))) # 应 1e-56.3 实盘部署 checklist从模型到行情接口的5个硬性校验校验项方法合格标准1. 时间对齐检查行情接口返回的K线时间戳是否与训练数据频率一致如都是5分钟时间差 ≤ 1秒否则滑动窗口错位2. 特征一致性对比实盘计算的RSI、MACD等指标与训练时代码是否完全相同包括平滑参数、周期所有指标值误差 0.013. 标准化参数加载scaler后用训练集最大/最小值打印scaler.data_max_与训练时保存的pkl文件一致4. 输出反归一化预测值乘以scaler.scale_[target_idx]加scaler.min_[target_idx]反归一化后值在合理股价范围内如0~1000元5. 状态重置每次新请求前清空LSTM隐藏态ONNX无状态但若用PyTorch Serving需手动reseth_n,c_n初始化为zeros我坚持一个习惯每次上线新模型前用最近3天的真实行情数据做离线回测画出预测曲线与实际K线的叠加图——如果第3步预测开始明显偏离肉眼可见立刻回滚。这不是保守而是股票预测的本质它不预测黑天鹅只刻画已知模式的延续性。模型再好也得尊重市场先生的情绪节律。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLOv5单目测距实战:原理、标定与工程实现

YOLOv5单目测距实战:原理、标定与工程实现

简介:YOLOv5单目测距项目是一份结合目标检测与单目深度估计的Python实现,面向自动驾驶、机器人导航、智能监控等需要实时距离感知的应用场景,适合有一定深度学习基础的开发者借鉴参考。资源包共132个文件,压缩包大小13.87MB&#…

2026/10/10 14:42:43 阅读更多 →
厦门飞鲲GEO:大模型筛选信源时,企业哪些数据在起决定作用

厦门飞鲲GEO:大模型筛选信源时,企业哪些数据在起决定作用

一、企业数字资产的GEO价值的四个常见问题大模型在生成答案时,究竟依据什么来筛选、引用和排序企业信息?这是当前企业数字资产建设中普遍存在的困惑。第一个问题:为什么有些企业内容被AI频繁引用,有些却从未出现在答案里&#xff…

2026/10/10 14:42:43 阅读更多 →
基于YoloV5的手语识别实战:从数据准备到边缘部署

基于YoloV5的手语识别实战:从数据准备到边缘部署

简介:基于YoloV5的手语识别项目包,面向目标检测初学者、计算机视觉方向学生及AI应用开发者,可用于手势识别算法验证、模型训练与实时推理场景。包内共181个文件,构成较完整的交付形态:75个XML标注与75张JPG图像组成可供…

2026/10/10 14:42:43 阅读更多 →

最新新闻

Agent Platform会话超时与熔断设计实战指南

Agent Platform会话超时与熔断设计实战指南

1. 这不是一次普通的Bug修复,而是一场关于“会话总闸”的压力测试Agent Platform这个词最近在技术圈里被反复提起,但很多人其实并不清楚它到底在系统里扮演什么角色——它既不是传统意义上的API网关,也不是简单的任务调度器,而是一…

2026/10/10 15:27:55 阅读更多 →
数字化转型实战:从数据治理到数据资产的一线落地路径

数字化转型实战:从数据治理到数据资产的一线落地路径

作为长期和数据打交道的从业者,我最近的重心几乎都放在一件事上:把数字化转型从会议室里的口号,变成业务线上真实跑通的动作。而这本在国内数据圈被反复提起的《数字化转型实践:数据之道》,恰好把我这几年碎片化踩坑的…

2026/10/10 15:27:55 阅读更多 →
产研开源协同:从科研到产业的实践路径

产研开源协同:从科研到产业的实践路径

开源圈子里有个现象我观察了好几年:越是贴近一线业务的人,越觉得开源是件“理所当然的事”;越是待在学术环境里的人,越觉得开源是件“说起来容易做起来难的事”。两边其实都在做开源,但做的方式、动机、评价体系完全不…

2026/10/10 15:27:55 阅读更多 →
高频信号源E8257D/E8247D/E8267D:从选型验机到SCPI编程实战

高频信号源E8257D/E8247D/E8267D:从选型验机到SCPI编程实战

1. 先搞清楚这三台机器到底是什么搞射频测试的老哥们,对“安捷伦信号源”这几个字肯定不陌生。E8257D、E8247D、E8267D,这三台是安捷伦(现在是是德科技的前身)PSG系列里的高频信号发生器,覆盖频率范围大致从250 kHz起步…

2026/10/10 15:27:54 阅读更多 →
向量法证明柯西不等式:从点积模长到n维推广

向量法证明柯西不等式:从点积模长到n维推广

讲到柯西不等式的证明,很多同学的第一反应是:又要开始背那一长串代数变形了。平方法、配方法、判别式法,每一步都像在走迷宫,等号条件还要专门记一套,一个不小心就漏了方向。我第一次给学生讲向量法证明时,…

2026/10/10 15:27:54 阅读更多 →
深入解析 Winscope “Invisible due to”:窗口不可见的底层原因与排查指南

深入解析 Winscope “Invisible due to”:窗口不可见的底层原因与排查指南

1. 先搞清楚:Winscope里的“Invisible due to”到底是谁写的前阵子连续帮人排查了两个窗口不显示的问题,现象几乎一样:在Winscope窗口详情面板里,目标窗口状态写着“invisible due to: app not visible”。不少人对这个字段的理解…

2026/10/10 15:26:53 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →