尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
MATLAB实现BP神经网络电力短期负荷预测实战指南
简介这是一份面向电力行业数据分析人员、电气工程专业学生及机器学习初学者的MATLAB BP神经网络负荷预测实践资源针对电网短期负荷预测非线性、时变和随机性强的难题提供完整可复现实现方案。资源围绕负荷历史数据的预处理缺失值处理、异常值检测、归一化、BP网络结构设计、训练函数选择、泛化评估及预测结果优化等环节展开模型可捕捉负荷变化的季节性、周期性与随机性特征。压缩包共336个文件以329个xlsx历史负荷数据为主体覆盖多日期多场景负荷样本另有3个m格式MATLAB源程序含数据读取、映射建模、主流程、1个md说明文档及少量辅助文件整体仅5.51MB便于下载与本地复现。已有132人学习使用适合希望结合真实数据快速上手BP神经网络建模的读者。通过代码与配套数据可掌握从数据清洗到模型训练、结果评估的完整操作链路并直接迁移到自身负荷预测任务中。1. 电力短期负荷预测为什么BP神经网络仍是可靠起点做电力系统调度的人几乎都躲不开短期负荷预测这道坎。不管是配电网的日负荷计划、变电站的容量安排还是售电公司的日前申报本质上都在回答同一个问题明天或者未来几个小时系统要吃多少电。过去靠相似日法、回归分析碰上节假日、气温骤变、工业用户启停预测误差常常直接冲上10%以上调度员只能靠人工经验去修。而BP神经网络尤其是单隐层的经典BP网络在这个任务里至今仍然是最不容易翻车的模型之一——它不需要你预设负荷和温度、湿度、日类型之间的函数关系数据喂进去隐层自己去拟合非线性映射这也是它成为很多从业者入门负荷预测的第一选择的原因。这篇笔记就围绕“用MATLAB做BP神经网络的电力短期负荷预测”展开从问题建模、数据预处理、网络搭建、参数调优到实际踩坑按一条完整可复现的路径讲清楚。无论你是刚接触负荷预测的新手还是已经在用其他机器学习库做预测、想回头评估BP方案的老手都能找到可以直接抄走的代码块和参数经验。先说明一点这里不讨论什么花哨的改进算法就用最朴素的feedforwardnet和newff把BP网络在负荷预测这件事上的潜力和边界都讲透。2. 负荷预测的本质是回归拟合BP网络为什么适配这个任务2.1 负荷序列的“可预测性”来自哪里电力负荷序列不是纯随机噪声它身上带着几层规律。第一层是趋势性年负荷逐年增长这主要由经济发展决定短期预测可以忽略第二层是周期性典型的就是“日周期”和“周周期”每天早高峰、晚高峰的位置基本稳定周一到周五和周末的形态差异也很明显第三层是气象敏感性温度升高制冷负荷上来温度降低采暖负荷上来夏季和冬季的敏感度还不一样。这些规律叠加在一起就让负荷序列成了一个“有结构”的时间序列建模的目标就是把这种结构提取出来。BP神经网络之所以适合做这件事在于它作为通用的非线性逼近器理论上能够以任意精度拟合一个有限维输入到输出的映射。也就是说你不必手写“今天最高温每升高1度负荷增加50兆瓦”这种规则只要把影响负荷的因素作为输入、负荷值作为输出网络就能从训练样本里自己学习这些关系。当然理论上能拟合和实际能不能学好是两回事输入特征选得不好网络照样抓瞎这一点在第四章会专门展开。2.2 输入输出设计决定预测上限的第一件事把负荷预测抽象成监督学习问题之后第一个要回答的问题是“用什么预测什么”。短期负荷预测里最常见的方案是“多点输入、单点输出”用前若干个时刻的负荷值再加上当天的温度、湿度、日类型工作日/周末/节假日、时刻序号去预测下一个时刻的负荷。这个做法的好处是可解释性强训练数据容易构造也是我做过的大多数项目里表现最稳定的结构。第二种方案是“多点输入、多点输出”一次性预测未来24小时的负荷曲线。这种方案看起来一步到位但在BP网络里并不推荐——输出维度增加会让隐层神经元需要同时拟合多个映射训练难度显著上升且后几个预测点的误差容易被前面几点带偏。如果你要预测未来24小时我的建议是采用滚动迭代方式先用单点模型预测下一小时然后把预测值作为历史数据拼进去再预测再往后一小时。虽然存在误差累积的风险但实操中比多输出模型更容易控制。% 构造输入输出样本以过去24小时负荷预测下一小时负荷 % data按小时采样的负荷序列列向量 % temp同时刻温度序列列向量 % X输入矩阵每行是一个样本 % Y目标输出每行是样本对应的下一小时负荷值 n length(data); past 24; % 使用过去24小时数据 X zeros(n - past, past 3); % 24个负荷点 温度 湿度 日类型 Y zeros(n - past, 1); for i past1 : n X(i-past, 1:past) data(i-past : i-1); X(i-past, past1) temp(i); X(i-past, past2) hum(i); X(i-past, past3) dayType(i); % 工作日1周末0节假日特殊处理 Y(i-past) data(i); end这段代码的核心逻辑是滑窗。past 24表示用一整天的历史负荷来预测下一小时这是短期负荷预测里比较稳妥的选择如果你预测的是15分钟粒度这个窗口可以收到96如果是15分钟粒度预测未来15分钟可以考虑把窗口缩短到16个点左右避免输入过于冗余。温度、湿度、日类型这三个额外特征不一定同时有用需要通过相关性分析来筛具体做法见后面的特征选择小节。2.3 归一化BP网络训练的“后悔药”要从数据开始BP网络的核心运算是加权求和后通过激活函数而S型激活函数logsig、tansig在输入绝对值较大的时候会进入饱和区梯度几乎消失网络基本停止学习。电力负荷的数值动辄几百甚至上千兆瓦如果直接喂给网络隐层神经元的加权输入很容易落在饱和区训练就变成了玄学。所以归一化不是可做可不做的预处理而是决定BP能不能训练出有效模型的必要条件。常见做法是把所有连续特征压缩到[0,1]区间使用min-max归一化x_norm (x - x_min) / (x_max - x_min)。要注意的是x_min和x_max必须从训练集计算然后同样用于验证集和测试集的变换。很多新手在这里翻车——先对全部数据做归一化再划分训练集和测试集这会导致测试集的信息提前泄露到训练过程中评估出来的误差虚低实际部署时效果对不上。% 训练集/测试集划分必须在归一化之前完成 train_ratio 0.8; idx floor(train_ratio * size(X,1)); X_train X(1:idx, :); Y_train Y(1:idx, :); X_test X(idx1:end, :); Y_test Y(idx1:end, :); % 基于训练集统计归一化参数 xmin min(X_train); xmax max(X_train); ymin min(Y_train); ymax max(Y_train); X_train_norm (X_train - xmin) ./ (xmax - xmin eps); Y_train_norm (Y_train - ymin) ./ (ymax - ymin eps); % 测试集使用训练集的归一化参数变换 X_test_norm (X_test - xmin) ./ (xmax - xmin eps); Y_test_norm (Y_test - ymin) ./ (ymax - ymin eps);eps加在分母上是为了防止某个特征在训练集里是常数导致除零。这里需要记住一个原则归一化参数是训练集的“私有信息”一旦对全量数据统一求min和max你的模型评估就失真了预测误差好看但没有实战价值。这也是我反复跟合作的同学强调的负荷预测不是论文里精度刷得越高越好而是要保证评估流程经得起实际部署的考验。3. MATLAB中的BP网络搭建从训练到预测的完整代码3.1 数据读入与样本构造的工程细节MATLAB里做负荷预测数据读入通常逃不过两个来源Excel表格和数据库查询结果。前者用readtable后者用database工具箱直连。不管哪种来源进入建模之前都要做一次彻底的数据体检否则后面训练出再好的模型也是空中楼阁。体检重点看三件事一是缺失值负荷数据在采集过程中经常出现通讯中断、遥测失败导致的空值二是异常值比如某时刻负荷突然掉到零、或者远超正常范围多半是采集设备故障或数据跳变三是时间戳对齐温度和湿度数据往往来自气象站采样粒度可能和负荷不一致需要按小时对齐。这些数据质量问题如果不提前处理BP网络会“认真地”把异常值当作真实规律去学习预测结果自然不可靠。% 从Excel读取负荷与气象数据 raw readtable(load_data.xlsx, VariableNamingRule, preserve); time raw.DateTime; % 时间戳列 load raw.Load; % 负荷值列 temp raw.Temperature; % 温度 hum raw.Humidity; % 湿度 % 缺失值处理线性插值 load fillmissing(load, linear); % 异常值处理超过均值3倍标准差视为异常用局部中位数替换 mu mean(load, omitnan); sigma std(load, omitnan); idx_abnormal abs(load - mu) 3 * sigma; load(idx_abnormal) movmedian(load, 24, Endpoints, fill);线性插值适合短时缺失如果连续缺失超过两小时建议观察一下缺失段的形态再决定怎么补用前后两天同时刻的均值补也是一种可靠方案。movmedian取的是以该点为中心前后24小时的窗口这个窗口大小和负荷日周期相关你如果用15分钟粒度数据窗口可以缩到96。异常值处理是负荷预测里容易被低估的一步处理得好预测误差能下降1到2个百分点。3.2 使用newff和feedforwardnet构建BP网络MATLAB里构建BP网络有两个入口老牌的newff和新版的feedforwardnet。newff从R2010b开始被标记为“将在未来版本移除”但现在许多老项目里还在用网上流传的很多负荷预测代码也是基于它写的feedforwardnet是现在的推荐接口语法更简洁默认的初始化方式也更合理。我个人的建议是新写的代码一律用feedforwardnet但如果你在维护老代码看懂newff的调用方式依然有必要。% 使用feedforwardnet构建单隐层BP网络 hiddenSizes [15]; % 隐层神经元数量 net feedforwardnet(hiddenSizes, trainlm); % 配置训练参数 net.divideFcn divideblock; % 按块划分训练/验证/测试集 net.divideParam.trainRatio 0.7; % 训练集70% net.divideParam.valRatio 0.15; % 验证集15% net.divideParam.testRatio 0.15; % 测试集15% % 设置训练停止条件 net.trainParam.epochs 1000; % 最大迭代次数 net.trainParam.goal 1e-5; % 目标误差 net.trainParam.min_grad 1e-7; % 最小梯度阈值 net.trainParam.max_fail 10; % 验证集连续不下降次数上限 % 训练 [net, tr] train(net, X_train_norm, Y_train_norm);这里有几个容易犯迷糊的地方。divideFcn的默认值是dividerand即随机划分数据这用在负荷预测上有两个问题一是随机划分会把时间上相邻的样本拆到训练集和测试集造成信息重叠测试误差偏低二是负荷序列存在周期性随机划分可能让相似日期的样本同时出现在训练和测试中评估结果过于乐观。所以负荷预测这种时间序列任务我强烈建议改成divideblock按时间顺序切块训练集在最前面测试集在最后面这才贴近真实场景——用历史预测未来。trainlm是Levenberg-Marquardt算法收敛速度最快对小规模网络效果好但内存消耗大。如果你的样本量很大比如超过几万条可以换成trainscg虽然收敛慢一些但内存占用少不容易炸。3.3 训练完成后的预测流程与误差指标计算训练完成之后预测流程有标准三步归一化测试输入、调用sim预测、反归一化还原为物理量纲。反归一化是新手最容易漏的一步因为训练时把Y压缩到了0到1之间输出的预测值也是0到1的尺度不还原就直接拿去和真实负荷比较误差算出来会惨不忍睹。% 测试集预测 Y_pred_norm sim(net, X_test_norm); Y_pred Y_pred_norm .* (ymax - ymin) ymin; % 反归一化后的预测值可能超出物理范围做截断处理 Y_pred(Y_pred 0) 0; % 计算误差指标 MAE mean(abs(Y_pred - Y_test), all); MAPE mean(abs((Y_pred - Y_test) ./ Y_test), all) * 100; RMSE sqrt(mean((Y_pred - Y_test).^2, all)); fprintf(MAE: %.2f MW\n, MAE); fprintf(MAPE: %.2f %%\n, MAPE); fprintf(RMSE: %.2f MW\n, RMSE);三个指标各有侧重。MAE最直观就是平均偏差多少兆瓦调度员最关心这个MAPE是相对误差的百分比便于在不同量级的系统之间对比RMSE因为对误差做了平方对大的离群点更敏感适合用来发现模型在个别时刻的严重偏离。如果MAE和RMSE差距很大说明预测误差分布不均匀可能存在少数时段严重预测失准的情况需要回去检查是不是异常日数据没有处理好。4. BP网络参数调优隐藏层、学习率与输入特征的精调思路4.1 隐藏层节点数从经验公式到实验对比BP网络的隐层节点数没有严格的解析解工程上一般从经验公式出发再通过实验微调。常见经验公式包括sqrt(n_in n_out) aa取1到10之间的整数、log2(n_in)、以及(n_in n_out) / 2这几个流派。我这里用的输入维度是2724个历史负荷点3个气象特征输出维度是1按第一个公式算下来隐层节点大约在6到15之间。我一般会做一个简单的循环实验隐层节点从5开始每次加2一直试到25每个配置训练3次取平均误差然后画一条误差曲线。这里的“训练3次取平均”是为了消除网络随机初始化带来的波动——同样的数据和参数BP网络每次训练结果都会略有差异这是随机初始化权重导致的不是程序出错了。% 隐层节点数对比实验 hiddenList 5:2:25; mapeResults zeros(length(hiddenList), 1); for k 1:length(hiddenList) errList zeros(3, 1); for trial 1:3 net feedforwardnet(hiddenList(k), trainlm); net.divideFcn divideblock; net.divideParam.trainRatio 0.7; net.divideParam.valRatio 0.15; net.divideParam.testRatio 0.15; net.trainParam.epochs 1000; net.trainParam.max_fail 10; [net, ~] train(net, X_train_norm, Y_train_norm); Y_pred_norm sim(net, X_test_norm); Y_pred Y_pred_norm .* (ymax - ymin) ymin; errList(trial) mean(abs((Y_pred - Y_test) ./ Y_test), all) * 100; end mapeResults(k) min(errList); % 取三次中最优的一次 end % 查看最优隐层节点数 [bestMAPE, bestIdx] min(mapeResults); bestHidden hiddenList(bestIdx); fprintf(最佳隐层节点数: %d, MAPE: %.2f%%\n, bestHidden, bestMAPE);这个实验跑完之后你大概率会发现一个现象隐层节点数超过某个值之后测试集误差反而开始上升。这就是过拟合——隐层节点太多网络容量过剩把训练样本里的噪声也背了下来。我做过一次对比实验15个节点的网络测试MAPE是3.1%强行加到40个节点之后训练集误差降到1%以内但测试集误差反而涨到5%以上典型的过拟合。4.2 学习率与训练终止条件别让小步慢走拖垮项目学习率lr控制的是梯度下降的步长。学习率太大权重更新越过最优点损失函数震荡甚至发散表现为训练误差忽高忽低不收敛学习率太小训练过程磨磨蹭蹭可能要跑几百甚至上千轮才收敛而且容易陷入局部极小点。MATLAB的trainlm算法会自适应调整学习率所以很多人直接不管这个参数但如果你换到trainscg或traingd学习率就要自己盯了。我常用的策略是初始学习率设0.01观察训练误差曲线的下降形态如果前几次迭代损失没有明显下降尝试0.05如果训练过程震荡发散调回0.001。另外trainParam.max_fail这个参数值得拿出来说它控制的是“验证集误差连续多少轮不下降就停止训练”默认值是6我建议调到10到15之间。原因在于负荷数据里存在周期性波动验证集误差有可能在某个阶段小幅反弹后继续下降max_fail设太小会提前终止训练模型欠拟合。% 以trainscg为例手动控制学习率参数 net feedforwardnet(15, trainscg); net.trainParam.lr 0.01; % 学习率 net.trainParam.epochs 2000; % 最大训练轮数 net.trainParam.goal 1e-6; % 目标误差均方误差 net.trainParam.max_fail 15; % 验证集不下降容忍次数注意trainscg是共轭梯度法对学习率不是特别敏感但lr仍然参与部分更新公式的计算。如果你发现训练时间过长可以把epochs加大配合max_fail来防止死循环。在训练过程中MATLAB会弹出神经网络训练窗口nntraintool里面实时显示均方误差曲线、梯度大小和验证集表现训练完看一眼这个窗口比单纯看最终误差更直观。4.3 输入特征选择堆特征不等于高精度很多初学者有个误区觉得输入特征越多、信息越全预测越准。实际经验是BP网络对冗余特征很敏感——无关特征会增加网络拟合难度还会和有效特征产生干扰导致预测精度下降。以负荷预测为例常见的候选特征包括历史负荷、干球温度、相对湿度、风速、降雨量、日类型、时刻、节假日标记、前一日同时刻负荷。听起来都合理但每个特征加入之后都要验证一下是否真的带来了精度提升。我习惯的做法是做一个简单的“增量特征实验”基准模型只用过去24小时负荷预测下一小时记录MAPE然后分别加入温度、湿度、日类型每次只加一个对比MAPE变化。如果某个特征加入后MAPE上升就果断去掉。在我的经验里温度和日类型通常是有效的湿度要看地区——南方湿润地区湿度对体感温度和空调负荷影响明显北方干燥地区可能没太大作用风速和降雨量多数情况下对负荷预测的贡献非常微弱。% 特征相关性快速查看 featureNames {负荷, 温度, 湿度, 风速, 日类型}; featureMatrix [load, temp, hum, windSpeed, dayType]; R corrcoef(featureMatrix); figure; heatmap(featureNames, featureNames, R);相关性热力图只能作为初筛参考它捕捉的是线性关系而BP网络能利用的还有非线性关系。所以最终要不要保留某个特征还是以模型实验为准不要让相关性分析直接拍板。我的经验是特征选择的顺序是选历史负荷窗口、再看气象、最后看日类型核心原则是“每个特征都要证明自己存在的价值”。5. 电力负荷预测的典型翻车场景与排查思路5.1 节假日预测集体失效工作日模型遇到假期就失准现象用同一套模型预测全年负荷普通日子的预测误差在3%左右但一遇到五一、国庆、春节误差直接飙到10%以上尤其是春节前后的两周负荷形态跟日常完全不是一个模式。原因BP网络训练数据里绝大多数是普通工作日和周末样本节假日样本占比太低网络根本没有学会节假日的负荷规律。更麻烦的是节假日期间负荷往往出现“双峰变单峰”“峰谷平移”等结构性变化这不是微调参数能解决的。解决把节假日从训练集里单独抽出来建专用模型或者给节假日样本加大权重。我常用的做法是建两个模型常规日模型负责普通工作日和周末节假日模型专门处理节假日及其前后一天。如果节假日样本量太少比如一年只有十几天可以用DBSCAN聚类找出历史同期相似日的数据来扩充。另外把节假日标记做成一个单独的强特征0/1/2三值代表普通日、节前节后、节日当天也能缓解问题但不能根治。5.2 温度突变日误差失控模型对气温敏感度学习不够现象某天突发寒潮气温一天内降了12度当天模型预测负荷比实际值低了5%以上或者夏季连续高温后突然下雨降温预测值偏高。这类误差在气温剧烈波动时集中爆发。原因BP网络从训练数据里学到的“温度-负荷”映射本质上是历史气象条件的平均响应。如果训练阶段没有经历过类似的剧烈降温网络外推能力有限预测自然失真此外气温对负荷的影响存在滞后性——建筑热惯性导致温度变化后负荷要过几小时才反应模型如果没有捕捉到这个滞后就会错位。解决对温度做“平滑处理”后再作为输入用过去几小时的平均温度代替当前时刻的瞬时温度。具体来说可以构造一个滑动窗口平均温度特征窗口长度取3到6小时。这比直接加大样本更有效因为它是从物理机理上修正了特征的表达方式。另一个思路是在训练集里做温度增强——把样本中的温度值加上扰动来模拟温度突变的场景但这只能作为辅助手段。5.3 MAPE在低负荷时段被小误差放大指标选取不当现象查看每小时预测误差时发现凌晨2点到5点的MAPE异常高甚至超过15%但看绝对误差MAE其实只有几十兆瓦远低于高峰时段的误差。原因MAPE是相对误差分母是实际负荷值。凌晨低负荷时段实际负荷可能只有高峰期的三分之一同样的绝对误差换算成百分比就被放大了。这不是模型变差了而是评价指标在低负荷区间天然敏感。解决评估模型时不要把MAPE作为唯一指标要同时看MAE和RMSE。如果模型在低负荷时段的绝对误差可以接受那MAPE偏高就不是问题。如果客户或上级只看MAPE这一个指标可以考虑在计算时对低负荷时段做加权处理或者在汇报时明确区分“峰时段MAPE”和“谷时段MAPE”避免把谷时段的指标混在一起掩盖了高峰时段的真实表现。5.4 训练集与测试集划分踩坑随机划分导致测试误差虚低现象训练完成后误差漂亮得难以置信测试MAPE只有1.5%比行业平均水平好一倍但模型投入实际部署后真实预测误差接近5%几乎翻了三倍。原因这是典型的随机划分数据集导致的预测结果虚高。dividerand把时间上相近的样本随机分到训练集和测试集意味着模型在测试时已经见过“邻居”样本——同一天相邻小时的负荷高度相关模型直接记住训练样本的数值就能把测试误差压得很低。真实部署是拿未来数据预测和训练数据的时间距离远记忆型模型自然就失效了。解决严格按时间顺序划分训练集用前60%到70%的历史数据验证集用中间15%测试集用最后15%到20%。也就是前面代码里用过的divideblock。另外还有一个细节归一化参数必须基于训练集计算测试集用同参数变换不能再对全量数据统一求min和max。我见过不少项目模型在论文阶段表现很好一上线就露馅原因大多都在这一节。6. 从单步到多步预测滚动迭代与评估指标的两个进阶技巧做负荷预测最终业务往往不只要预测下一个小时而是要拿到未来24小时的完整曲线。这里介绍一个我常用的滚动预测方案以及两个评估层面的习惯性做法。滚动预测的核心思想是“预测值回填”用训练好的单步模型预测出t1时刻的负荷后把预测值当作已知量拼接到输入窗口中再预测t2如此迭代直到刷完整条预测曲线。这种方法的优点是模型可以保持单步输出的简单结构缺点是误差会随着预测步长增加逐步累积。一个有效的缓解手段是引入“修正项”——利用训练集上的历史预测误差分布对后段预测值做一个偏移校正% 滚动预测未来24小时 horizon 24; Y_roll zeros(horizon, 1); input_window X_test_norm(1, 1:past); % 初始输入窗口 for h 1:horizon % 当前窗口拼上气象特征和日类型 current_input [input_window; temp_norm(h); hum_norm(h); dayType_norm(h)]; pred_norm sim(net, current_input); pred pred_norm .* (ymax - ymin) ymin; Y_roll(h) pred; % 把预测值回填到输入窗口滚动继续 input_window [input_window(2:end); pred_norm]; end这个循环里有一个容易被忽略的细节回填的是归一化后的预测值而不是物理单位的负荷值。因为下一轮输入要和历史窗口中的归一化数值保持同一尺度如果回填了反归一化的值输入尺度不一致预测就会出错。另外初始输入窗口取的是测试集第一个样本的前24个负荷点这些是真实历史值滚动开始后窗口里逐步被预测值占据。第二种技巧是关于模型评估的“分时段报告”习惯。我在提交预测结果时会把预测误差拆成高峰时段比如早上8到11点、晚上18到21点、平段和低谷时段三组分别计算MAPE。这样做的原因在于调度决策对高峰时段精度的敏感度远高于低谷时段——高峰时段误差意味着备用容量配置偏差影响系统安全而低谷时段误差主要影响经济调度影响相对可控。分时段报告能让使用方把注意力放在真正关键的指标上这种汇报方式在项目交接中很有用。最后一个习惯是长期跟踪模型的“周误差均值漂移”。电力负荷的特性会随季节变化去年训练的模型今年夏天可能就不好使了。我一般每周记录一次本周平均MAPE如果连续两周上升超过0.5个百分点说明模型需要重新训练如果单日某个时段的误差突然变大先查数据采集有没有故障再考虑是不是发生了模型没有见过的极端天气。这个“监控-报警-重训”的循环才是BP负荷预测模型在工程中持续可用的保证。希望这篇笔记能帮到你。我在这条路上也吃过不少亏从随机划分数据导致的模型虚高到节假日预测集体翻车每一步都是用实际项目的血泪换来的经验。BP网络不是最前沿的模型但它在负荷预测这个任务上配合严谨的数据处理和参数调优依旧是能稳定落地的可靠选择。本文还有配套的精品资源点击获取
RELATED

相关推荐

Python3 变量写入 SQL 语句的 4 种方法:从拼接、参数化到元组传参

Python3 变量写入 SQL 语句的 4 种方法:从拼接、参数化到元组传参

/* 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 0:59:12
Vue 3 SSR实战:从CSR到服务端渲染,解决首屏性能与SEO收录问题

Vue 3 SSR实战:从CSR到服务端渲染,解决首屏性能与SEO收录问题

我做Vue项目开发这些年,花时间最多、收益最明显的一块,居然是被业务方逼着补上的SSR。起因是一个品牌官网,SEO一直抓不到内容,首页白屏稳定在4秒以上,市场部天天催,开发组内部又僵在“继续加loading动画等S…

📅 2026/10/10 0:59:12
10 分钟跑通 TradingAgents:从 pip 安装到让 AI 帮你分析第一只股票

10 分钟跑通 TradingAgents:从 pip 安装到让 AI 帮你分析第一只股票

10 分钟跑通 TradingAgents:从 pip 安装到让 AI 帮你分析第一只股票 【免费下载链接】TradingAgents-AI.github.io TradingAgents: Multi-Agents LLM Financial Trading Framework 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-AI.github.io …

📅 2026/10/10 0:59:12
MORE NEWS

更多资讯

📰

2026年降AI率工具真实测评:10款改写工具的优劣与使用边界

最近后台被问到最多的一个问题,大概就是“2026年自考复习写的东西,AI率太高,怎么办”。这不是什么新鲜话题,从两年前开始,我就陆续测过三十多款和文本降重、降AI率有关的工具。这次干脆花了整整四周,把市面…

📰

BigBanana AI Director:一站式AI短剧与漫剧导演平台工程实践

简介:BigBanana AI Director 是一套面向短剧与漫剧创作者的工业级本地化 AI 制作平台,主打从故事构思到成片输出的一站式工作流,数据全程留在本机,兼顾隐私安全与知识产权归属。它整合剧本生成、角色设定、分镜设计、语音合成与画…

📰

BigBanana AI Director:工业级AI短剧与漫剧全流程制作实战指南

简介:BigBanana AI Director 是一套面向专业内容创作者的工业级 AI 短剧与漫剧全流程制作平台,基于开源架构构建,支持完全离线运行,从故事生成、角色设定、分镜设计、语音合成到成片输出一站式完成,数据全程保留在本地…

📰

深入理解Spring三级缓存:循环依赖的机制、局限与排查实践

1. 循环依赖是什么,以及你为什么会碰到它先聊个场景。有一次我在排查一个偶发启动失败的问题,某个服务明明本地跑得好好的,一上测试环境就报BeanCurrentlyInCreationException。日志堆栈指来指去,最后定位到就是两个 Service 互相…

📰

用编程思维打造个人知识体系:IoC、依赖注入与响应式学习实操指南

我前两年一度陷入一个很常见的循环:买了不少课、收藏了一堆文章、笔记记了好几本,可三个月后发现,真正能讲清楚、能上手用起来的,其实没几个。后来想明白一个问题——我不是懒,也不是笨,而是把学习做成了“…

📰

联邦学习赋能大模型WAF:破解数据孤岛与攻击变异难题

1. 项目概述:当大模型撞上WAF,不是堆算力,而是重新定义“看见攻击”的方式最近在某高校实验室做安全方向的模拟项目X时,团队里一位做NLP的同事随手把一份Web攻击日志喂给刚微调好的小规模语言模型,结果模型不仅标出了S…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬