简介这份资源面向新能源发电与深度学习交叉方向的学习者提供一套基于时空建模的风机发电风速及功率预测完整项目源码与训练权重。项目围绕多风机场景展开可用于风电功率预测、时序建模等课程设计或科研复现适合具备Python与深度学习基础的中高级读者。压缩包共12个文件约178KB包含6个Python脚本负责数据处理、模型定义与训练流程2个CSV指标文件记录风速与功率评估结果2个pt权重文件可直接加载推理另有说明文档与readme辅助理解目录结构。已有380人学习下载。读者可借此获得从数据管理、模型搭建到训练评估的完整工程链路结合预训练权重快速验证效果并参考指标文件对比风速与功率两路任务的性能表现为二次开发与实验调参提供可复用的基线方案。1. 风机功率预测这套源码到底能解决什么现场问题风电场最头疼的不是没风而是风来了不知道能发多少。电网调度要提前报次日发电计划报高了要考核报低了白扔电量偏差超过阈值直接罚款。传统物理方法靠测风塔加功率曲线遇到复杂地形和季节切换就明显掉链子。这套「Python 基于深度学习的风机发电风速及功率预测项目源码权重文件」走的是数据驱动路线用历史 SCADA 数据训练模型输入风速、风向、温度、气压等特征直接回归出未来一段时间的风速和输出功率。它适合三类人想入门深度学习又不想啃纯理论的数据分析新手、需要快速搭一套预测基线的新能源算法工程师、以及手里有风场数据想验证可行性的运维人员。源码加权重文件意味着你不用从零训练能先跑通推理再回头改结构这一点对上手节奏很关键。2. 风速与功率预测的技术选型为什么是 LSTM 而不是普通回归2.1 风速序列的时间依赖决定了模型下限风速不是独立同分布的随机数今天下午三点的风速和过去几个小时强相关。用线性回归或者随机森林直接拿单点特征去拟合模型学不到这种时序惯性短期预测误差会很大。常见做法是把过去 24 到 72 个时间步的风速、功率、温度拼成滑动窗口喂给能处理序列的模型。LSTM 通过门控机制保留长期依赖对风速这种既有趋势又有突变的信号比较稳。如果风场数据量足够大、算力也够Transformer 类结构在长序列上表现更好但训练成本和调参难度明显上升作为第一版基线LSTM 加全连接输出头是性价比最高的选择。选型时还要区分两个任务风速预测是纯时序回归功率预测则要在风速基础上叠加机组特性。有的方案把风速预测结果再送进功率曲线映射有的直接端到端回归功率。端到端省事但可解释性差分两步走便于排查是风没预测准还是功率转换环节出了问题。我一般建议先做端到端跑通再拆开做误差归因。2.2 数据预处理缺失值、异常值和归一化一个都不能省SCADA 数据几乎没有干净的。传感器掉线、限电停机、结冰期功率为零这些都会污染训练集。下面这段预处理代码是跑通项目前必须过的一关。import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler # 读取原始 SCADA 数据时间列解析为索引 df pd.read_csv(scada_raw.csv, parse_dates[timestamp]) df df.set_index(timestamp).sort_index() # 1. 缺失值风速用线性插值功率停机段不插值直接标记 df[wind_speed] df[wind_speed].interpolate(methodlinear, limit6) df[power] df[power].where(df[power] 0, np.nan) # 2. 异常值用 3-sigma 截断避免极端值带偏归一化 for col in [wind_speed, power, temperature]: mean, std df[col].mean(), df[col].std() df[col] df[col].clip(mean - 3 * std, mean 3 * std) # 3. 归一化风速功率量纲差异大统一缩到 0-1 scaler MinMaxScaler() scaled scaler.fit_transform(df[[wind_speed, power, temperature]]) # 4. 滑动窗口用过去 48 步预测下一步 def make_windows(data, window48): X, y [], [] for i in range(len(data) - window): X.append(data[i:iwindow]) y.append(data[iwindow, 0]) # 第 0 列是风速 return np.array(X), np.array(y) X, y make_windows(scaled) print(X.shape, y.shape) # (样本数, 48, 3) (样本数,)这段逻辑里插值 limit6 是防止连续缺失被拉成直线3-sigma 截断比直接删行更保样本量归一化必须用训练集 fit 再 transform 验证集否则会数据泄漏。窗口长度 48 对应 48 个采样点如果数据是 10 分钟一条就是过去 8 小时这个尺度对短期预测够用。窗口太短学不到趋势太长会引入噪声且显存吃紧48 到 72 之间调。2.3 模型结构LSTM 加全连接头的落地写法import torch import torch.nn as nn class WindLSTM(nn.Module): def __init__(self, input_dim3, hidden_dim64, num_layers2, output_dim1): super().__init__() # batch_firstTrue 让输入维度为 (batch, seq, feature) self.lstm nn.LSTM(input_dim, hidden_dim, num_layers, batch_firstTrue, dropout0.2) self.fc nn.Sequential( nn.Linear(hidden_dim, 32), nn.ReLU(), nn.Linear(32, output_dim) ) def forward(self, x): # out 取最后一个时间步的隐状态 out, _ self.lstm(x) return self.fc(out[:, -1, :]) model WindLSTM() criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr1e-3)hidden_dim 设 64 是起点数据量大可以加到 128num_layers 两层足够再深容易过拟合且训练慢dropout 0.2 是常规正则。损失用 MSE 对回归任务直接但如果功率预测更关心高峰段误差可以换成对高功率样本加权。学习率 1e-3 配 Adam 是稳妥组合训练不收敛先降到 1e-4 试。3. 把源码和权重文件跑起来环境、推理与微调3.1 环境搭建与依赖版本对齐拿到源码和权重文件后第一件事不是急着跑而是把环境对齐。深度学习项目翻车十有八九是版本不匹配。常见做法是建独立虚拟环境按源码里的 requirements 装没有就手动锁几个核心包。# 创建虚拟环境Python 3.8-3.10 兼容性最好 python -m venv wind_env source wind_env/bin/activate # Windows 用 wind_env\Scripts\activate # 核心依赖版本按源码实际调整 pip install torch1.13.1 numpy pandas scikit-learn matplotlib pip install -r requirements.txt # 如果源码带了torch 版本要和权重文件匹配权重是用哪个版本存的推理就用哪个版本跨大版本加载可能报 key 不匹配。numpy 和 pandas 负责数据处理matplotlib 用来看预测曲线。装完先跑一句python -c import torch; print(torch.__version__)确认没报错。3.2 加载权重做推理最小可跑通脚本import torch import numpy as np from model import WindLSTM # 源码里的模型定义 from sklearn.preprocessing import MinMaxScaler # 1. 实例化结构必须和训练时完全一致 model WindLSTM(input_dim3, hidden_dim64, num_layers2) state torch.load(wind_lstm.pth, map_locationcpu) model.load_state_dict(state) model.eval() # 推理模式关掉 dropout # 2. 准备一段输入形状 (1, 48, 3) sample np.random.rand(1, 48, 3).astype(np.float32) with torch.no_grad(): pred model(torch.from_numpy(sample)) print(归一化预测值:, pred.item()) # 3. 反归一化回真实量纲 scaler MinMaxScaler() scaler.fit(np.array([[0,0,0],[25,2000,40]])) # 用训练集真实范围 real scaler.inverse_transform([[pred.item(), 0, 0]]) print(风速预测 m/s:, real[0][0])load_state_dict 报错通常是结构对不上检查 hidden_dim 和 num_layers 是否和训练一致。model.eval() 不能省否则 dropout 会让每次推理结果都不同。反归一化必须用训练时的 scaler 参数这里用真实范围模拟实际项目要保存 scaler 对象。3.3 在自己的数据上微调权重文件是别人数据训的直接用到你的风场大概率不准。微调比重训省时间。冻结 LSTM 层只训全连接或者用很小的学习率全量微调。# 冻结 LSTM 参数只更新全连接层 for name, param in model.named_parameters(): if lstm in name: param.requires_grad False optimizer torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr5e-4) # 之后正常训练循环epoch 不用多10-20 轮看验证集损失冻结策略适合新数据量小的情况几百条样本就能见效。数据上千条可以解冻全量微调学习率降到 1e-4 避免破坏预训练特征。微调时验证集一定要按时间切分不能随机打乱否则未来数据泄漏到训练里指标虚高。4. 预测效果上不去先排查这几个坑4.1 损失降不下去预测曲线一条直线现象训练 loss 卡在某个值不动预测出来几乎是一条水平线。原因通常是归一化没做或者标签没对齐模型学到均值就躺平了。解决检查输入输出是否都归一化滑动窗口的 y 是否真的对应窗口后一步打印几条样本肉眼确认。4.2 验证集很好上线就崩现象离线指标漂亮实际部署误差翻倍。原因是数据泄漏随机切分让未来信息进了训练。解决严格按时间顺序切分训练集在前验证集在后中间留 gap 避免窗口重叠。4.3 功率预测在低风速段误差巨大现象大风段预测准小风段偏差离谱。原因是低风速样本少且功率接近零MSE 被大功率样本主导。解决对功率做分段加权或者对低功率样本过采样也可以先预测风速再查功率曲线。4.4 权重加载报 Missing key(s)现象load_state_dict 提示缺 key 或多 key。原因是模型定义和训练时不一致常见于改了层名或维度。解决打印 state_dict 的 key 和模型 key 对比逐层核对别凭记忆改结构。4.5 推理速度慢单条要几百毫秒现象批量推理还行单条实时预测延迟高。原因是每次都在建计算图。解决加 torch.no_grad()模型转 eval必要时用 torch.jit 导出静态图单条延迟能降一个量级。5. 让预测真正可用滚动预测与误差评估的实操技巧模型跑通只是起点能不能用在调度上报看的是滚动预测和误差评估做得细不细。单步预测意义有限实际要的是未来 4 小时、24 小时的功率曲线。做法是滚动多步先用过去 48 步预测下一步把预测值拼回输入窗口再预测下下步循环到目标长度。这样误差会累积所以每预测几步要用最新实测值校正一次常见是预测 4 步校正一次。误差评估别只看 MSE。调度关心的是合格率也就是预测偏差落在允许区间内的比例。我一般会同时算三个指标MAE 看平均偏差RMSE 放大误差惩罚准确率按1 - |pred-real|/装机容量算再统计 85% 和 90% 合格率。下面这段评估代码可以直接套。import numpy as np def evaluate(pred, real, capacity): mae np.mean(np.abs(pred - real)) rmse np.sqrt(np.mean((pred - real) ** 2)) acc 1 - np.abs(pred - real) / capacity pass_rate np.mean(acc 0.85) # 85% 合格率 return {MAE: mae, RMSE: rmse, 准确率: acc.mean(), 合格率: pass_rate} # pred/real 为反归一化后的功率序列capacity 为装机容量 result evaluate(pred, real, capacity2000) print(result)capacity 用风场装机容量合格率阈值按当地考核标准调有的地方是 80% 有的 85%。滚动预测时建议把每步误差单独记录画出来能看出误差在第几步开始发散据此决定校正频率。还有一个容易被忽略的点模型要定期更新。风机老化、地形变化、季节切换都会让数据分布漂移权重文件放三个月不更新准确率会慢慢掉。我自己的习惯是每月用最近数据微调一次每季度评估是否要重训。这套源码加权重文件的价值不在于它训得多好而在于给你一个能快速迭代的底座把精力放在数据和评估上比反复调网络结构划算得多。希望帮到你。本文还有配套的精品资源点击获取