news 2026/4/13 14:03:17

这把时间序列预测的活儿交给CNN和GRU组队来干,效果确实有点东西。咱们不整那些虚的,直接看实战代码。先给大伙儿看个整体结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这把时间序列预测的活儿交给CNN和GRU组队来干,效果确实有点东西。咱们不整那些虚的,直接看实战代码。先给大伙儿看个整体结构

基于(CNN-GRU)的时间序列预测程序,预测精度很高。 可用于做风电功率预测,电力负荷预测等等 标记注释清楚,可直接换数据运行。 代码实现训练与测试精度分析。

import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv1D, MaxPooling1D, GRU, Dense def create_model(input_shape): model = Sequential() # 卷积层提取局部特征 model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=input_shape)) model.add(MaxPooling1D(pool_size=2)) # GRU捕捉时间依赖 model.add(GRU(100, return_sequences=True)) model.add(GRU(50)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mae') return model

这个双剑合璧的结构挺有意思——CNN负责抓取数据中的局部模式(比如负荷数据中的短时波动),后面的GRU层专门处理时间维度上的长期依赖。注意第二个GRU层没开return_sequences,这样最后输出就是个单值预测了。

数据预处理这块得讲究,直接上滑动窗口处理:

def sliding_window(data, window_size): X, y = [], [] for i in range(len(data)-window_size): X.append(data[i:i+window_size]) y.append(data[i+window_size]) return np.array(X), np.array(y) # 假设raw_data是加载好的时序数据 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(raw_data.reshape(-1,1)) X, y = sliding_window(scaled_data, window_size=24)

这里有个小技巧:先用MinMaxScaler做归一化,把数据压到0-1之间。滑动窗口的步长根据具体场景调整,比如预测小时级负荷可能取24小时周期。

训练时建议加个早停法:

from keras.callbacks import EarlyStopping model = create_model((X.shape[1], 1)) history = model.fit(X_train, y_train, epochs=200, batch_size=32, validation_split=0.2, callbacks=[EarlyStopping(patience=15)])

注意看验证集的loss曲线,一般30-50个epoch就能收敛。实际跑风电数据时发现,batch_size调到64有时效果更好,可能和数据的波动特性有关。

测试环节的误差分析可以这样搞:

y_pred = model.predict(X_test) # 反归一化 real_pred = scaler.inverse_transform(y_pred) real_true = scaler.inverse_transform(y_test.reshape(-1,1)) rmse = np.sqrt(mean_squared_error(real_true, real_pred)) mape = np.mean(np.abs((real_true - real_pred)/real_true)) * 100 print(f'RMSE: {rmse:.2f}, MAPE: {mape:.2f}%')

上次用某省电网负荷数据实测,24小时预测的MAPE能压到3%以内。不过要注意异常天气情况——比如突然高温导致用电激增,这时候可能需要加入气象因子作为额外输入。

最后说下部署注意事项:

  1. 数据更新频率要匹配预测需求(比如5分钟级数据就不要用小时级模型)
  2. 模型最好定期retrain,电力系统数据存在季节特征漂移
  3. 遇到预测误差突然增大,先检查输入数据的完整性

完整代码里我埋了个彩蛋:在损失函数里加入了自适应权重,会根据预测误差的方差动态调整。这个trick让模型在面对波动剧烈的风电数据时,比传统方法稳定不少。

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

单相动态电压恢复器补偿电压凹陷或过电压研究附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/11 0:17:23

Compose笔记(六十六)--ModalNavigationDrawer

这一节主要了解一下Compose中的ModalNavigationDrawer,在Jetpack Compose开发中,ModalNavigationDrawer是一个用于实现模态导航抽屉的核心组件,它允许用户通过侧滑手势或点击菜单图标触发一个覆盖在主内容之上的抽屉菜单,提供页面切换、功能导…

作者头像 李华
网站建设 2026/4/11 15:19:40

反激变换器与Buck - boost电路:电力变换的奇妙世界

反激变换器 - Buck-boost电路 在电力电子领域,反激变换器和Buck - boost电路就像两颗璀璨的明星,各自闪耀着独特的光芒,为我们实现各种电源转换需求立下汗马功劳。今天咱们就一起深入这两个神奇电路的世界,探索它们的奥秘。 Buc…

作者头像 李华
网站建设 2026/4/12 2:17:10

继DeepSeek后,量化巨头九坤推40B开源硬刚Claude 4.5,实测结果却反转

00. 引言 说实话,这两年追开源模型,我的心态已经从最初的“卧槽牛逼”变成了现在的“审美疲劳”。 每周都有新模型号称“拳打GPT,脚踢Claude”,结果实测,翻车的不少。但就在昨天,我在刷推特(X)的时候&…

作者头像 李华
网站建设 2026/4/11 23:47:33

2026年:30年来最好的创业时代

Greg Isenberg,36岁连续创业者,卖掉3家公司,帮助融资数十亿美元,分享了他眼中2026年创业的20个历史性机遇。 技术变革带来的机会: 硬件正在觉醒——开源AI廉价机器人打开无数应用场景。传统SaaS正在崩塌,曾…

作者头像 李华
网站建设 2026/4/12 15:15:55

四大子词分词算法详解

四大子词分词算法详解 1. BPE (Byte Pair Encoding) 原理 BPE是最基础的子词分词算法,通过迭代地合并最频繁出现的字符对来构建词表。 训练过程 输入语料: low: 5次 lower: 2次 newest: 6次 widest: 3次步骤: 初始化:将每个单词拆…

作者头像 李华