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在瞎猜。所以越大越好。