LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网络,可以解决 RNN 无法处理长距离的依赖的问题,在时间序列预测问题上面也有广泛的应用。

lstm的目标就是为了学习八组参数,分别是遗忘门、输出门、输入门以及计算单元状态的权重和偏置项。

这里有对应不同输入输出lstm模型的构造:https://www.jianshu.com/p/88090a7895db

 

对于lstm模型的参数这两天进行了研究,将经验总结到博客中。

数据集的格式:(数据条数,timestep,特征数)

keras的lstm模型参数:

tf.keras.layers.LSTM(
    units,
    activation="tanh",
    recurrent_activation="sigmoid",
    use_bias=True,
    kernel_initializer="glorot_uniform",
    recurrent_initializer="orthogonal",
    bias_initializer="zeros",
    unit_forget_bias=True,
    kernel_regularizer=None,
    recurrent_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    recurrent_constraint=None,
    bias_constraint=None,
    dropout=0.0,
    recurrent_dropout=0.0,
    return_sequences=False,
    return_state=False,
    go_backwards=False,
    stateful=False,
    time_major=False,
    unroll=False,
    **kwargs
)

 

units:输入空间的维数

activation:使用的激活函数,默认为双曲正切

recurrent activation:循环步骤的激活函数,默认的sigmoid

use_bias:层里是否使用偏执向量

kernel_regularizer:正则化函数

dropout:0-1

 

 

 

这里timestep我选择了8,这个8代表我每8个单词具有关联性,在我这里单词就是传感器的1

batchsize参数并不会影响时序,当值为1的时候属于online learning,值更大的时候就是批训练。batchsize不可过大,参数要和epochs一起调整,结合图像防止过拟合。

verbose:1为显示进度条,2为只显示数据信息。

其他的参数可以参考

或者keras的中文文档https://keras.io/zh/layers/recurrent/

数据集介绍:

搭了一个基于esp32的开发板。它读取以2x4阵列排列的8个触摸传感器。esp32在任何传感器上检测到初始触摸,然后通过wifi连接将每个触摸传感器的下一个100点(约一秒钟)的(标准化)值发送到benchdb数据库。
由于设置,每个事件记录了8 * 100个值。这个想法是训练3个任意手势并使用ML对新事件进行分类。触摸阵列旨在用作常规用户界面。对于初始测试,已使用以下手势并给出了“类”的名称。

向右滑动=“ r”
向左滑动=“ b”
双击=“ k”

  

输入的格式使用(None,100,8)因为我们要保留时序信息,所以不把输入进行展开,且要指定shuffle=False。

模型的评估指标为

1.rmse 

  能够表示出预测值和真实值之间的偏差,越小越好,偏差较大的点将会极大的影响rmse评价。

2.r squared 误差

  1-(分子是训练模型的误差,分母是随机猜测的误差)。接近1的时候说明训练模型基本没有误差,接近0的时候说明基本就是tm在瞎猜。所以越大越好。