博主采用消融实验,通过LSTM,Seq2Seq+LSTM,LSTM+Attention,Seq2Seq+Attention+LSTM,CNN+BiLSTM+Attention五种模型框架对环境污染数据集进行实验,结果如下:
LSTM模型实现
结构图解
代码实现
模型结构
实验结果
Test RMSE: 16.235
Seq2Seq模型实现
结构图解
首先我们需要了解一些基础概念,博主的大框架使用的是Seq2Seq:
实例介绍
使用Keras建立Seq2Seq模型的基本方法如下:
下面以时间序列为例来讲解各网络层,各参数的含义:
参数讲解
假设我们的输入有4个时间步,要预测未来的3个时间步,也就是每一个时间样本有4个时间切片,为了简单起见我们就以简单的单变量为例,每个时间步下1个特征也就是序列数据本身,然后标签也是时间样本,每个时间样本下3个时间切片,每个时间切片下也是一个特征,样本的构造大概长这个样子,以1个样本为例:
input
[[1]] [[2]] [[3]] [[4]]
output:
[[5]] [[6]] [[7]]
则代码如下:
TimeDistributed和Dense的使用
下面代码是keras里面给出的解释:
从上述代码中可以发现,TimeDistributed和Dense一起配合使用,主要应用于一对多,多对多的情况。
input_shape = (10,16),表示步长是10,每一步的维度为16,(即:每一个数据的属性长度为16))
首先使用TimeDistributed(Dense(8),input_shape = (10,16))把每一步的维度为16变成8,不改变步长的大小
若该层的批输入形状然后(50, 10, 16),则这一层之后的输出为(50, 10, 8)
RepeatVector的使用
这个是keras官网给出的解释
解释:如果输入的形状为(None,32),经过添加RepeatVector(3)层之后,输出变为(None,3,32),RepeatVector会改变我们的步长,不改变我们的每一步的维数(即:属性长度)
代码实现
模型结构
实验结果
Test RMSE: 17.565
LSTM+Attention模型实现
代码实现
注意力模型的实现需要我们定义一个注意力块,其主要完成的是一个维度转换并进行求权重值的作用。
模型结构
实验结果
迭代20次后效果不错:当然使用了注意力机制后,在获得了准确性的同时,也需要进行计算的消耗,时间复杂度提升,导致运行时间也加长。
最终的结果:Test RMSE: 13.438
Seq2Seq+Attention+LSTM模型构建
结构图解
该模型实际为Seq2Seq与Attention两者的结合体。
代码实现
网络模型结构
实验结果
Test RMSE: 20.571
CNN+LSTM+Attention模型实现
代码实现
注意力模块使用的是之前的
模型结构
实验结果
Test RMSE: 15.296