何为非侵入式负荷分解-深度学习算法实现

1 前言

        做负荷分解的网络很多,本篇用contrib中的几个网络对AMPds数据集进行训练和测试。本篇内容较短。仅展示部分网络的代码和结果。        

2 数据集

        AMPds数据集所选电器见下表。电器选择原则如下:

        1)所选电器种类丰富,包括二态电器(如电视、冰箱)、多态电器(如洗衣机、洗碗机),这些电器具有代表性。

        2)数据集中其他分支,如卧室,厨房,电子工作台等不具有代表性。

        3)所选电器的功耗占据了家庭住户中绝大部分的电力功耗。

        电器描述

电器

描述

TVE

电视

HPE

热泵

FRE

强制空气炉:风扇和恒温器

FGE

冰箱

DWE

洗碗机

CWE

洗衣机

CDE

干衣机

2 深度学习网络代码

seq2seq

def seq2seq(window_length):

    model = Sequential()
    # 1D Conv
    model.add(Conv1D(30,10,activation="relu",input_shape=(window_length,1),strides=2))
    model.add(Conv1D(30, 8, activation='relu', strides=2))
    model.add(Conv1D(40, 6, activation='relu', strides=1))
    model.add(Conv1D(50, 5, activation='relu', strides=1))
    model.add(Dropout(.2))
    model.add(Conv1D(50, 5, activation='relu', strides=1))
    model.add(Dropout(.2))
    model.add(Flatten())
    model.add(Dense(1024, activation='relu'))
    model.add(Dropout(.2))
    model.add(Dense(window_length))
    model.compile(loss='mse', optimizer='adam')
    return model

seq2point

def seq2point(window_length):
    # Model architecture
    model = Sequential()
    model.add(Conv1D(30,10,activation="relu",input_shape=(window_length,1),strides=1))
    model.add(Conv1D(30, 8, activation='relu', strides=1))
    model.add(Conv1D(40, 6, activation='relu', strides=1))
    model.add(Conv1D(50, 5, activation='relu', strides=1))
    model.add(Dropout(.2))
    model.add(Conv1D(50, 5, activation='relu', strides=1))
    model.add(Dropout(.2))
    model.add(Flatten())
    model.add(Dense(1024, activation='relu'))
    model.add(Dropout(.2))
    model.add(Dense(1))
    model.compile(loss='mse', optimizer='adam')  # ,metrics=[self.mse])
    return model

dae

def dae(window_length):
    model = Sequential()
    model.add(Conv1D(8, 4, activation="linear", input_shape=(window_length, 1), padding="same", strides=1))
    model.add(Flatten())
    model.add(Dense((window_length)*8, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense((window_length)*8, activation='relu'))
    model.add(Reshape(((window_length), 8)))
    model.add(Conv1D(1, 4, activation="linear", padding="same", strides=1))
    model.compile(loss='mse', optimizer='adam')
    return model

3 结果展示

        所有模型的窗口大小统一为256,256为随意选的。

CDE

DWE

FRE

HPE

TVE

        从分解结果可以看出seq2seq的效果更稳定。

 4 指标

H=30
TVEHPEFREFGEDWECWECDE
seq2seqmse47.8891182.022632.4597659.515262.9213224.73551142.3779
mae19.4147746.1711117.4905647.7460811.32223.61736714.72881
sae0.4813380.2167680.1426871.0381780.6530791.0445270.247477
precision0.8949670.9862210.9499570.9595720.4240070.99147
F_score0.9445730.99306210.9743370.9793690.5955120.995717
seq2pointmse52.06977163.004130.3196764.2758112.218227.99394281.472
mae20.1721237.010517.200251.0497321.788954.65502434.85449
sae0.5004960.1735880.1403171.1099091.2552911.3425230.584923
precision0.7375540.98216810.9064640.3490860.0227030.928833
F_score0.8489570.99100410.9509380.5175150.0443990.963103
DAEmse54.01654198.653335.2255667.77168108.076327.73127453.771
mae24.2188156.2983918.2422161.0169821.566355.22951249.99487
sae0.6004410.2643140.1488191.3267371.2439751.5100390.840026
precision0.8843150.998953110.3387480.0632750.54253
F_score0.9386060.999476110.5060670.1190190.703429
H=40
TVEHPEFREFGEDWECWECDE
seq2seqmse47.8891182.022632.4597659.515262.9213224.73551142.3779
mae19.4147746.1711117.4905647.7460811.32223.61736714.72881
sae0.4813380.2167680.1426871.0381780.6530791.0445270.247477
precision0.8173550.79657210.8659410.9486710.3256970.990495
F_score0.89950.88676910.9281550.9736590.491360.995225
seq2pointmse52.06977163.004130.3196764.2758112.218227.99394281.472
mae20.1721237.010517.200251.0497321.788954.65502434.85449
sae0.5004960.1735880.1403171.1099091.2552911.3425230.584923
precision0.6821340.68135710.8124620.3098230.0095090.917134
F_score0.8110340.81048510.8965290.4730760.018840.956776
DAEmse54.01654198.653335.2255667.77168108.076327.73127453.771
mae24.2188156.2983918.2422161.0169821.566355.22951249.99487
sae0.6004410.2643140.1488191.3267371.2439751.5100390.840026
precision0.735460.692362110.2802810.0347960.517183
F_score0.8475680.81822110.4378430.0672510.681767

        从指标上也可以看出seq2seq总体上效果最好。

 5 总结

        本篇的结果仅仅针对在Ampds下,窗口大小为256时,三种算法的对比。负荷分解就是不断在复现模型,修改模型的过程。效果好了,就能写论文了。欢迎大家讨论最新的网络,之后有时间也会更新对于一些新网络的复现。

6 建议

        很多入门的小白,在学习负荷分解时可以先根据一个模型把所有的流程都做一遍下来,熟悉了以后,接下来只需要对模型进行更换或者改进即可。一个完整的流程包括:数据处理、模型搭建、模型训练和测试、指标计算和结果可视化。当搭建了一个完整的流程后,以后看到别人的开源代码,你只需要提取其中的模型搭建部分的代码,然后放到自己的框架里面跑就行。这样你在对比各种算法时就更方便。毕竟没有人希望跑不同算法时,用不同的环境去跑,费时费力。

 

 

 

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱钻研的电气人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值