用于单变量时间序列模型参数识别的LSTM是否需全步长时移?
问题
我用LSTM深度学习方法识别生成单变量时间序列的数学模型参数,这些参数会影响时间序列的振荡频率与形态。目前搭建的LSTM模型输入是1秒时长的时间序列(含1024个样本),模型结构如下:
DLmodel = Sequential() DLmodel.add(LSTM(units=Nb_input, return_sequences=True, input_shape=(None, Nb_input), activation='sigmoid')) DLmodel.add(Dropout(0.3)) DLmodel.add(Dense(Nb_input // 4, activation="relu", kernel_initializer="uniform")) DLmodel.add(Dropout(0.3)) DLmodel.add(Dense(Nb_input // 8, activation="relu", kernel_initializer="uniform")) DLmodel.add(Dropout(0.3)) DLmodel.add(Dense(Nb_output, activation="linear", kernel_initializer="uniform"))
其中参数定义:
Nb_input = number of sample # 即1024 Nb_output = number of parameter to identify # 即3
我的训练思路如下:
while 1: label = randomly choose 3 model parameters N times (dimension = 1 x N x 3) signal = generate N signal of 5 seconds (dimension = 1 x N x 1024) # 通过滑动窗口扩充训练集 training set = windowed signal (dimension = 1 x N*5 x 1024) label = copy model parameters(dimension = 1 x N*5 x 3) Fit the LSTM Test LSTM on new data
核心疑问:训练LSTM时,输入是否必须采用1样本步长时移构建训练集?还是可以采用完整窗口(1024样本)步长时移?另外,窗口起始处的事件与窗口末尾处的事件,对LSTM而言是否等效?
回答
- 不是必须用1样本步长的滑动窗口,两种步长方式都可行,核心看任务需求和数据特性:
- 1样本步长:会生成大量重叠的训练样本,能让模型更充分学习时间序列的连续细节,比如振荡的过渡形态。但缺点是样本冗余度高,训练计算量会大很多,还可能引入过拟合风险——毕竟很多样本高度相似。
- 完整窗口步长:生成的样本完全不重叠,每个样本对应时间序列上的独立片段。这种方式训练效率更高,没有冗余,但模型能学习到的时间连续性信息会少一些,不过如果你的5秒信号里已经包含足够多的振荡周期,也能覆盖参数对应的形态特征。
- 窗口起始和末尾的事件对LSTM不等效。LSTM是顺序模型,对输入序列的时序信息敏感,窗口里的事件顺序会影响它提取的特征。比如一个振荡信号,窗口起始在波峰和起始在波谷,输入给LSTM的序列时序完全不同,模型提取的特征自然有差异。不过因为你的任务是识别生成信号的全局模型参数(参数决定整个信号的振荡特性),只要窗口包含足够多的振荡周期,不管窗口起始位置在哪,模型最终应该能学到参数对应的全局特征——只是用1样本步长的话,模型会接触到更多不同起始位置的样本,对参数的鲁棒性识别可能更好。
内容的提问来源于stack exchange,提问作者ymmx
相关产品推荐
相关产品推荐

