码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)


    目录

    • I. 前言
    • II. 数据处理
    • III. LSTM模型
    • IV. 训练/测试
    • V. 源码及数据

    I. 前言

    在前面的一篇文章TensorFlow搭建LSTM实现时间序列预测(负荷预测)中,我们利用LSTM实现了负荷预测,但我们只是简单利用负荷预测负荷,并没有利用到其他一些环境变量,比如温度、湿度等。

    本篇文章主要考虑用TensorFlow搭建LSTM实现多变量时间序列预测。

    系列文章:

    1. 深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)
    2. PyTorch搭建LSTM实现时间序列预测(负荷预测)
    3. PyTorch中利用LSTMCell搭建多层LSTM实现时间序列预测
    4. PyTorch搭建LSTM实现多变量时间序列预测(负荷预测)
    5. PyTorch搭建双向LSTM实现时间序列预测(负荷预测)
    6. PyTorch搭建LSTM实现多变量多步长时间序列预测(一):直接多输出
    7. PyTorch搭建LSTM实现多变量多步长时间序列预测(二):单步滚动预测
    8. PyTorch搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
    9. PyTorch搭建LSTM实现多变量多步长时间序列预测(四):多模型滚动预测
    10. PyTorch搭建LSTM实现多变量多步长时间序列预测(五):seq2seq
    11. PyTorch中实现LSTM多步长时间序列预测的几种方法总结(负荷预测)
    12. PyTorch-LSTM时间序列预测中如何预测真正的未来值
    13. PyTorch搭建LSTM实现多变量输入多变量输出时间序列预测(多任务学习)
    14. PyTorch搭建ANN实现时间序列预测(风速预测)
    15. PyTorch搭建CNN实现时间序列预测(风速预测)
    16. PyTorch搭建CNN-LSTM混合模型实现多变量多步长时间序列预测(负荷预测)
    17. PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)
    18. PyTorch时间序列预测系列文章总结(代码使用方法)
    19. TensorFlow搭建LSTM实现时间序列预测(负荷预测)
    20. TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)
    21. TensorFlow搭建双向LSTM实现时间序列预测(负荷预测)
    22. TensorFlow搭建LSTM实现多变量多步长时间序列预测(一):直接多输出
    23. TensorFlow搭建LSTM实现多变量多步长时间序列预测(二):单步滚动预测
    24. TensorFlow搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
    25. TensorFlow搭建LSTM实现多变量多步长时间序列预测(四):多模型滚动预测
    26. TensorFlow搭建LSTM实现多变量多步长时间序列预测(五):seq2seq
    27. TensorFlow搭建LSTM实现多变量输入多变量输出时间序列预测(多任务学习)
    28. TensorFlow搭建ANN实现时间序列预测(风速预测)
    29. TensorFlow搭建CNN实现时间序列预测(风速预测)
    30. TensorFlow搭建CNN-LSTM混合模型实现多变量多步长时间序列预测(负荷预测)
    31. PyG搭建图神经网络实现多变量输入多变量输出时间序列预测
    32. PyTorch搭建GNN-LSTM和LSTM-GNN模型实现多变量输入多变量输出时间序列预测
    33. PyG Temporal搭建STGCN实现多变量输入多变量输出时间序列预测
    34. 时序预测中Attention机制是否真的有效?盘点LSTM/RNN中24种Attention机制+效果对比
    35. 详解Transformer在时序预测中的Encoder和Decoder过程:以负荷预测为例

    II. 数据处理

    数据集为某个地区某段时间内的电力负荷数据,除了负荷以外,还包括温度、湿度等信息。

    本文中,我们根据前24个时刻的负荷以及该时刻的环境变量来预测下一时刻的负荷。最终得到了batch_size=B的数据集Dtr、Val以及Dte,Dtr为训练集,Val为验证集,Dte为测试集。

    任意输出一条数据:

    (<tf.Tensor: shape=(24, 7), dtype=float32, numpy=
    array([[0.36147627, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.3429366 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.34939995, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.35257494, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.39485145, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.38066387, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.44114256, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4603167 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.45330796, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.47912365, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.46706894, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.5081953 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4452976 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4360156 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4917237 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4723147 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.47849187, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.524864  , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.52128404, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.47682068, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.4345901 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.39052632, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.33869517, 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244],
           [0.3025095 , 0.        , 0.90909094, 0.        , 0.8333333 ,
            0.3255814 , 0.24390244]], dtype=float32)>, <tf.Tensor: shape=(1,), dtype=float32, numpy=array([0.37805316], dtype=float32)>)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    每一行对应一个时刻点的负荷以及环境变量,此时input_size=7。

    III. LSTM模型

    这里采用了TensorFlow搭建LSTM实现时间序列预测(负荷预测)中的模型:

    class LSTM(keras.Model):
        def __init__(self, args):
            super(LSTM, self).__init__()
            self.lstm = Sequential()
            for i in range(args.num_layers):
                self.lstm.add(layers.LSTM(units=args.hidden_size, input_shape=(args.seq_len, args.input_size),
                                          activation='tanh', return_sequences=True))
            self.fc1 = layers.Dense(64, activation='relu')
            self.fc2 = layers.Dense(args.output_size)
    
        def call(self, data, training=None, mask=None):
            x = self.lstm(data)
            x = self.fc1(x)
            x = self.fc2(x)
    
            return x[:, -1:, :]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    IV. 训练/测试

    简单训练了30轮,MAPE为4.14%:
    在这里插入图片描述

    V. 源码及数据

    后面将陆续公开~

  • 相关阅读:
    OceanBase 全局索引与局部索引探索
    富格林:安全落实防备诱导欺诈建议
    【题解 && 单调队列优化dp】 简单的加法乘法计算题
    zeek学习(二)
    在京东如何做好前端系统的可观测性
    KMP算法
    React中的Fiber更新机制如何执行的setState
    GIC/ITS代码分析(6)中断处理
    session的状态或者生命周期
    25 mysql like 是否使用索引
  • 原文地址:https://blog.csdn.net/Cyril_KI/article/details/126430942
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号