【预测】基于CNN-BiLSTM-Attention的光伏预测模型

01 基本信息

摘要: 为解决光伏功率输出受光照、温度、气象条件等因素影响导致的强波动性与时序依赖性问题,本文构建了CNN-BiLSTM-Attention(卷积神经网络-双向长短期记忆网络-注意力机制)融合预测模型。模型首先对光伏相关数据集(如历史功率、气象特征)进行预处理(划分训练/测试集、归一化、维度重塑),再通过CNN层提取光伏数据中的局部时空特征(如短期气象突变对功率的影响);引入SE(Squeeze-and-Excitation)通道注意力机制,对CNN提取的特征进行通道权重分配,强化关键特征(如光照强度特征)的贡献、抑制冗余信息;随后通过BiLSTM层捕捉光伏功率的长短期时序依赖关系(如日内功率变化趋势、多日周期规律);最终经全连接层与回归层输出光伏功率预测值。模型采用Adam优化器训练,以均方根误差(RMSE)、决定系数(R²)等为评价指标,实现对光伏功率的高精度预测,为光伏电站的功率调度与并网稳定提供支撑。程序运行环境: matlab2020+版本,注释清晰,效果好!数据: 光伏数据包括太阳辐照度、温度和出力数据

02 主要内容

2.1 CNN 层:提取局部时空特征

光伏功率受短期局部因素影响显著(如1小时内云层遮挡导致的功率骤降),CNN通过卷积核滑动实现局部特征提取------将输入特征(如光照、温度)映射为高维特征图,捕捉特征间的局部关联(如光照强度与功率的短期非线性关系)。卷积层的核心公式如下:

上式中,Y为输出特征图,X为输入特征图,σ为激活函数。

2.2 SE注意力机制:通道权重分配

CNN提取的64维特征通道中,不同通道对光伏功率的影响差异显著(如"光照强度通道"比"湿度通道"更重要)。SE(Squeeze-and-Excitation)注意力通过"压缩-激励"两步,为每个通道分配自适应权重,强化关键通道特征,抑制冗余信息,提升模型对重要特征的敏感度。

2.3 BiLSTM层:捕捉长短期时序依赖

光伏功率具有显著的时序连续性(如日内功率从低到高再到低的趋势、多日功率受天气周期影响的规律),LSTM(长短期记忆网络)通过"遗忘门、输入门、输出门"解决传统RNN的梯度消失问题,而BiLSTM同时从"前向时序"(过去→现在)和"反向时序"(未来→现在)学习依赖关系,更全面捕捉光伏功率的时序特征。

03 部分代码

.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }warning off % 关闭报警信息close all % 关闭开启的图窗clear % 清空变量clc % 清空命令行tic% restoredefaultpath%% 导入数据res = xlsread('data1.xlsx');%% 数据分析num_size = 720; % 训练集占数据集比例outdim = 1; % 最后一列为输出num_samples = size(res, 1); % 样本个数% res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)num_train_s = 720; % 训练集样本个数f_ = size(res, 2) - outdim; % 输入特征维度%% 划分训练集和测试集P_train = res(1: num_train_s, 1: f_)';T_train = res(1: num_train_s, f_ + 1: end)';M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';T_test = res(num_train_s + 1: end, f_ + 1: end)';N = size(P_test, 2);%% 数据归一化[p_train, ps_input] = mapminmax(P_train, 0, 1);p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);t_test = mapminmax('apply', T_test, ps_output);%% 数据平铺% 将数据平铺成1维数据只是一种处理方式% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构% 但是应该始终和输入层数据结构保持一致p_train = double(reshape(p_train, f_, 1, 1, M));p_test = double(reshape(p_test , f_, 1, 1, N));t_train = double(t_train)';t_test = double(t_test )';

04 运行结果

优秀的预测代码能够帮文章增色不少,专门研究预测方向的同学可以研究此代码并开展对比分析,其他电力方向的同学可以在预测的基础上开展调度以及配置等研究

相关推荐
feifeigo1234 天前
matlab画图工具
开发语言·matlab
Gofarlic_oms14 天前
避免Kisssoft高级分析模块过度采购的科学评估方法
大数据·linux·运维·人工智能·matlab
rit84324994 天前
全变分正则化图像去噪的MATLAB实现
开发语言·matlab
Evand J4 天前
通过matlab实现机器学习的小项目示例(鸢尾花分类)
机器学习·支持向量机·matlab
bu_shuo4 天前
MATLAB命令行窗口中的字体放大操作
matlab·命令行
micro_xx4 天前
Matlab 有限元分析三维悬臂梁变形
前端·数据库·matlab
Matlab程序设计与单片机4 天前
【变压器故障诊断分类与预测(DGA原始数据)】基于标准Elman神经网络
matlab·elman神经网络·变压器故障诊断与分类预测
Evand J4 天前
【课题推荐】深度学习驱动的交通流量预测系统(基于LSTM的交通流量预测系统),MATLAB实现
人工智能·深度学习·matlab·课题简介
晞子的技术札记5 天前
单相Heric并网逆变器工作原理及MATLAB仿真测试
开发语言·matlab
Matlab程序设计与单片机5 天前
【变压器故障诊断分类与预测(三比值法)】基于标准GRNN神经网络
matlab·grnn神经网络·变压器故障诊断与分类·三比值法