news 2026/3/26 2:08:29

基于三维卷积神经网络与门控循环单元结合注意力机制的预测模型:数据驱动负荷预测、PM2.5预测及...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于三维卷积神经网络与门控循环单元结合注意力机制的预测模型:数据驱动负荷预测、PM2.5预测及...

三维卷积神经网络和门控循环单元加上注意力机制(3D CNN-GRU-Att)的结合上构建的,此代码可以运用到负荷预测、PM2.5预测、光伏预测中等等,只需要替换你自己的数据即可跑所有实验图都是代码跑出来的

江湖上一直流传着时空预测的传说,今天咱们来盘一盘这个能打十个的3D CNN-GRU-Attention组合拳。这玩意儿在电力负荷预测里能把传统模型按在地上摩擦,在PM2.5预测战场上也能七进七出。不整虚的,直接上代码!

先看这个时空特征提取的狠角色——3D卷积。咱们用Keras实现起来跟切菜似的:

from keras.layers import Conv3D, Reshape input_layer = Input(shape=(24, 5, 5, 1)) # 24小时历史数据,5x5空间网格 # 第一层3D卷积暴力提取特征 conv1 = Conv3D(filters=64, kernel_size=(3, 3, 3), activation='relu')(input_layer)

这里用3x3x3的核在时空维度上滑动,就像拿着探照灯在时空立方体里找规律。注意输出的形状会自动保持时间维度,这是后续接GRU的关键。

接下来是时间序列处理的扛把子GRU,配上注意力机制简直如虎添翼:

from keras.layers import GRU, Dense, Multiply # 把卷积输出压平时间步长 reshape = Reshape((22, -1))(conv1) # 24-3+1=22个时间步 # GRU捕捉时间依赖 gru_out, gru_state = GRU(128, return_sequences=True, return_state=True)(reshape) # 注意力机制搞事情 attention = Dense(1, activation='tanh')(gru_out) attention = Flatten()(attention) attention = Activation('softmax')(attention) context = Multiply()([gru_out, attention])

这段代码暗藏玄机:GRU不仅返回最终状态,还把每个时间步的输出都吐出来。注意力层就像个智能聚光灯,自动找到关键时间点重点关照。

整个模型拼装起来就像搭乐高:

from keras.models import Model # 拼接输出层 output = Dense(24)(context) # 预测未来24个时间点 model = Model(inputs=input_layer, outputs=output) model.compile(optimizer='adam', loss='mape')

这里输出层直接预测多个时间点,比传统递归预测更高效。注意损失函数用了MAPE,对负荷预测这种相对误差敏感的场景特别合适。

数据预处理才是真功夫,以电力负荷数据为例:

def create_dataset(data, look_back=24, pred_steps=24): X, Y = [], [] for i in range(len(data)-look_back-pred_steps): # 3D输入需要空间维度,假设有5x5区域数据 X.append(data[i:i+look_back].reshape(look_back,5,5,1)) Y.append(data[i+look_back:i+look_back+pred_steps]) return np.array(X), np.array(Y)

这个reshape操作把一维时间序列变成伪3D数据,实际业务中可能需要根据传感器位置调整空间维度。比如把不同变电站的数据排成网格。

训练时记得用时空数据增强:

from keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=20, # 空间旋转增强 width_shift_range=0.2, height_shift_range=0.2) model.fit_generator(datagen.flow(X_train, y_train, batch_size=32), steps_per_epoch=len(X_train)/32, epochs=100)

这里把图像增强技术用在时空数据上,相当于给模型喂了"时空扭曲"的特训套餐,大幅提升泛化能力。

预测的时候玩点花的——滚动预测未来多步:

def rolling_prediction(model, init_data, steps=24): preds = [] current_batch = init_data.reshape(1, 24, 5, 5, 1) for _ in range(steps): pred = model.predict(current_batch)[0] preds.append(pred[0]) # 更新输入数据,类似滑动窗口 current_batch = np.concatenate([current_batch[:,1:], pred.reshape(1,1,5,5,1)], axis=1) return np.array(preds)

这个滚动预测相当于让模型自己续写时间序列,每次预测下一步时都把最新预测值塞回输入窗口,适合长期预测场景。

在光伏预测中实测发现,加入注意力机制后模型对日出日落的时间点特别敏感。比如当注意力权重突然在早晨6点暴增,说明模型自动捕捉到了光伏发电的启动时刻。

代码里有个暗坑要注意:3D卷积会压缩时间维度。比如用kernel_size=(3,3,3)时,输入24个时间步经过卷积后会变成22个时间步。所以在GRU层前面要确保时间步数量合理,别被卷没了。

最后说句大实话:这套模型在1080Ti上跑起来确实有点烫手,建议把空间维度不要超过10x10。实际工业部署时可以改用 separable convolution 省显存,这个在另一个版本里实现了,点赞过500就放出来!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 17:34:43

信号老司机的日常离不开时频图这玩意儿,毕竟光看时域波形就像看天书,频域谱线又丢失了时间信息。今天手把手整几个MATLAB时频分析代码,从入门到入土(误)

时频图程序(小波时频&#xff0c;短时傅里叶变换&#xff0c;s变换) MATLAB程序先搞个模拟信号热热身&#xff1a; fs 1000; % 采样率别太小气 t 0:1/fs:1; f1 20; f2 100; signal sin(2*pi*f1*t).*(t<0.5) sin(2*pi*f2*t).*(t>0.5); % 分段信号 noise 0.5*randn(…

作者头像 李华
网站建设 2026/3/26 11:07:17

sklearn函数总结十一 —— 随机森林

纯手打&#xff0c;代码整理中&#xff0c;持续更新中^-^序号延用总结十18.1 随机森林算法核心思想随机森林属于集成学习中的 Bagging 类型。“森林”&#xff1a;由多棵决策树构成的“森林”&#xff0c;最终的预测结果由所有决策树共同决定&#xff08;例如&#xff0c;通过投…

作者头像 李华
网站建设 2026/3/25 19:46:54

直播回放 | IDMP 无问智推技术详解

在生产车间、设备集控室、运维指挥中心&#xff0c;每天都有成千上万条数据实时上传&#xff1a;温度、压力、转速、电流……这些数据&#xff0c;被系统精准地记录了下来&#xff0c;也被整整齐齐地存进了数据库。但真正的问题是&#xff1a; &#x1f50d; 谁在关注这些数据…

作者头像 李华
网站建设 2026/3/17 13:05:29

VDD_EXT低功耗设计指南:原理剖析与优化策略!

VDD_EXT的性能表现直接影响系统的电源完整性与能效比。在低功耗设计中&#xff0c;必须深入理解其供电机制、电压容限及动态响应特性&#xff0c;才能避免不必要的能量损耗。本文将从基础原理入手&#xff0c;系统梳理VDD_EXT的设计优化策略&#xff0c;为工程师提供实用参考。…

作者头像 李华
网站建设 2026/3/12 22:55:47

AI大模型学习全攻略:产品经理必看,程序员必备的实用指南

本文探讨AI大模型发展现状及对产品经理的影响&#xff0c;提供把握机遇的方法&#xff0c;包括技术理解、需求洞察、产品规划和跨团队协作。详细介绍学习路径&#xff1a;基础学习、编程技能、理论与实践、专业课程、社区参与和持续跟踪。同时提供学习路线、报告合集、经典书籍…

作者头像 李华