S2P(Sequence to point)模型

文章探讨了非侵入性负载监测(NILM)问题,将其视为时间和序列分析的优化问题。通过使用seq2seq模型和LSTM网络,然后提出seq2point模型来改进预测准确性。seq2point模型利用1D卷积神经网络集中处理滑动窗口的中点,从而提供更精确的设备功率预测。损失函数用于优化模型,而模型结构包括一系列1D卷积层和全连接层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NILM问题是一个典型的时间序列分析问题

以功率为例,某一时刻的总功耗由各设备的工作状态和该时刻对应的总功率决定

假定设备只有开、关两种状态,且功率恒定,总功率可表示为:

 图中:am(t)表示设备m的开关状态(开为1,关为0),Pm表示设备m的功率,e(t)为噪声或误差的量


将NILM问题看作一个优化问题

若M个设备各自的功率都已知且给定测量到的总功率,则可以将NILM问题看作一个优化问题:

在每个时刻t,对m维向量进行搜索使得功率误差a^(t)尽量最小:

将NILM看作一个序列建模问题

 序列建模是将输入序列或观察序列映射到输出序列或标记序列。

序列建模公式的一般形式可以看作是满足因果约束的任意映射函数 f:X^T+1 →Y^T+1,该预测只使用x1,x2x3,...,xt-1来预测yt,而不会使用这之后时刻的数据。

这种方法的目的是训练一个模型

传统做法为建立一个基于seq2seq并结合递归神经网络和LSTM网络的回归模型

将输入序列Y(总负荷的功率序列)的滑动窗口片段映射为另一个序列X(单独一个设备相应的功率),以最大化概率 P(y1,y2,...,yn | x1,x2,...,xn)。

公式表示如下:

\large X_{t:t+W-1}=F_{s}(Y_{t:t+W-1})+\varepsilon

t:t+W-1表示从t开始的长度为W的滑动时间窗口

ε 表示w维高斯随机噪声

 损失函数:

 T为序列长度,θs为网络Fs的参数

在seq2seq模型中,对输出信号的每个元素进行多次预测,通过对多次预测的平均得到最终的预测。

事实上,一些滑动窗口可以提供比其他窗口更好的预测,但简单的滑动窗口平均不能利用这些信息

seq2point(S2P)模型

为解决以上问题所提出的

输入与seq2seq模型一样为总负债的滑动窗口片段,但是将输出变为目标设备的单个点

并使用卷积神经网络对模型进行训练,将网络的表征能力集中在窗口的中点上,以产生更准确的预测

在该模型总神经网络(Fp)将输入的总功率数据(Y)在t到 t+W-1之间的滑动窗口片段的数据映射到相应时间范围中的每个设备的功率数据(X_{t:t+W-1})的中点x_{\tau }

公式:

x_{\tau }=F_{p}(Y_{t:t+W-1},\theta_{p} )+\varepsilon

损失函数:

主要优点是对每个中点元素进行单一的预测,而不是对每个窗口的预测的平均值

结构体系:

1. Input sequence with length Y[t:t+W−1]
2. 1D Convolution: filters: 30; filter size: 10, activation function=ReLU
3. 1D Convolution: filters: 30; filter size: 8, activation function=ReLU
4. 1D Convolution: filters: 40; filter size: 6, activation function=ReLU
5. 1D Convolution: filters: 50; filter size: 5, activation function=ReLU
6. 1D Convolution: filters: 50; filter size: 5, activation function=ReLU
7. Fully connected: units: 1024, activation function=ReLU
8. Output: Output: Number of units:1, activation: linear
python:
# Creates and returns the ShortSeq2Point Network
model = Sequential()
# 1D Conv
model.add(Conv1D(30, 10, activation='relu', input_shape=(time_stamp,1), padding="same", strides=1))
model.add(Dropout(0.5))
model.add(Conv1D(30, 8, activation='relu', padding="same", strides=1))
model.add(Dropout(0.5))
model.add(Conv1D(40, 6, activation='relu', padding="same", strides=1))
model.add(Dropout(0.5))
model.add(Conv1D(50, 5, activation='relu', padding="same", strides=1))
model.add(Dropout(0.5))
model.add(Conv1D(50, 5, activation='relu', padding="same", strides=1))
model.add(Dropout(0.5))
# Fully Connected Layers
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer="adam")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值