我来继续填坑了~~
给大家两周时间自习深度学习(磨蹭了两周)
不知道同学们的基础打得如何了哈
QQ群1070535031
我分两篇写网络训练的相关,本文介绍整个思路流程,下一篇提供实操代码和相关注释讲解
关注顺序建议:
1,先仔细阅读本文思路分析,认真思考,并且根据学习的深度学习的相关知识,边跟我的思路走,边考虑一下,我这么做的目的,以及优缺点。是你自己的话,如何做,以及如何优化。
2,下一篇给出代码,按功能模块,每一块叠加就是整个项目。不过我建议边思考,边自己去写一遍,弄懂每句代码的含义,才是你的。不然后面我提供改进思路,大家一起实践的时候,你会盲目的手足无措。
实验需求
跟随本文进行学习和实验,需要前面博文中的环境,以及提取出来的UK数据。(学习分享——基于深度学习的NILM负荷分解(二)电器数据提取)
实验环境:
pycharm,python 3.6+,keras库,numpy库,matplotlib库
以及UKData。
思路分析
进入正题~~
上一节中,我们把一号房子的所有用电器的有用功分别取出来了,电器的数据很多。
为了我们调试和优化网络方便,前期不浪费太多时间去训练。
这里我们从中取出5个比较有区别度的电器数据,来进行流程搭建。
提高准确率,提高区分度,多个同样电器,,等问题,一点点迭代我们的网络。训练的输入数据也可以随之添加。
简单看来,负荷分解 是一个 “多分类,多标签问题”,分析N个电器的有用功变化,根据变化规律,进行多分类。
另外有的同学的思路会是去识别,开启/关闭电器的事件。但由于,这里使用的是低频数据,所以,识别短促的事件并不容易识别到,开启/关闭时候的变化也抓不打详细的变化规律。(需要高频数据,才能体现出不同电器的短时变化规律)
因此本篇的思路是,根据电荷的变化规律,识别电器的开启状态。简单说:根据电荷实时变化,识别哪些电器开着。
由上面这个思路,就可以知道,要看频率变化规律:
1,可以用傅里叶变换,分解出总负荷在哪些频段,来判断电器。
2,直接使用循环神经网络,输入总电荷,用窗口①来抓取总负荷的变化。
那我们从简入深,这里先使用上面第二个思路,这样基本上不用怎么处理数据,建立一个窗口数据的时序网络,直接输入序列数据即可。
窗口:意思如下图,去取一定长度的序列,取完一个,往后移动一段距离,取下一个窗口。
下图每个颜色就是取的一次窗口数据。可以看出其中包括两个参数:窗口长度,窗口每次移动距离(移窗)
这两个参数设置好,第一次取的数据就是1,第二次取2,,之后3,,,之后4,,,,以此列推
之后呢,我们就可以看看数据怎么准备了。
我们取出来的电器数据,组合五个电器,可以合成出来一个总功~~
然后将其分为,训练数据,验证数据,以及测试数据。测试数据不参与训练。
还要为训练生成一下我们训练需要的data对于的label,用于多分类的训练。
有了数据,就是设计网络了。
上面说了序列数据的处理思路,那就是用循环网络,这里我们选用GRU或LSTM来搭建。来学习数据变化的规律。
根据经验,在循环网络前,我们还要添加几层1D来提炼数据。(一维卷积)
循环网络后接全连接收敛到5个结果。
结果就是训练的五个电器的开关状态。我们定义为1为开着,0为关着。
到此,初步的思路就比较全面了,我画一张简单的步骤流程图,
1,生成五个采样电器的合并数据
2,生成 label 用于训练。label是五个电器每一时刻的开关状态。0为关闭状态,1为开启状态。
3,将Data和Label 切分成三份。用于 训练,验证,测试。
4,构建网络结构,使用循环网络,学习总功率变化规律,判断电器开关状态。
5,训练网络,验证结果,进行测试。
下一文,我们来实现上面的整个流程。
QQ群1070535031