码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • TensorFlow搭建LSTM实现多变量多步长时间序列预测(一):直接多输出


    目录

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

    I. 前言

    在前面的两篇文章TensorFlow搭建LSTM实现时间序列预测(负荷预测)和TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)中,我们利用LSTM分别实现了单变量单步长时间序列预测和多变量单步长时间序列预测。

    本篇文章主要考虑用PyTorch搭建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个时刻的负荷以及该时刻的环境变量来预测接下来12个时刻的负荷(步长可调)。

    任意输出其中一条数据:

    (<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=(12,), dtype=float32, numpy=
    array([0.37805316, 0.34055534, 0.32864106, 0.32987487, 0.32875174,
           0.31902698, 0.37937066, 0.3773944 , 0.4436723 , 0.4644258 ,
           0.46383727, 0.46949607], 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
    • 50
    • 51
    • 52

    数据格式为(X, Y)。其中X一共24行,表示前24个时刻的负荷值和该时刻的环境变量。Y一共12个值,表示需要预测的12个负荷值。需要注意的是,此时input_size=7,output_size=12。

    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. 训练和预测

    训练和预测代码和前几篇都差不多,只是需要注意input_size和output_size的大小。

    训练了30轮,利用前24个时刻的负荷值和其余变量预测接下来12个时刻的负荷值,MAPE为:11.34%。

    V. 源码及数据

    后面将陆续公开~

  • 相关阅读:
    极客日报:iPhone 13系列新增苍岭绿:7999元起;腾讯文档崩了;Android 12L命名为Android 12.1|极客头条
    centOs云服务器安装Docker
    SkyWalking内置MQE语法
    超全!程序员必备的20个学习网站,看这一篇就够了!
    虹科 | 解决方案 | 汽车示波器 远程诊断方案
    Python学习之CSDN21天学习挑战赛计划之4
    一句话总结敏捷实践中不同方法
    postman接口测试
    算法日常训练11.28(813.最大平均值和的分组)
    C# 拨号面板 高亮显示
  • 原文地址:https://blog.csdn.net/Cyril_KI/article/details/126444938
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号