我使用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
Nb_output = number of parameter to identify
我的想法是
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)
increase the training set by using a shift window on the time series
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的Angular 来看)?
1条答案
按热度按时间ctehm74n1#
有许多方法可以拆分数据以进行训练,例如:假设您有一个数据集
我们将序列分解为一系列长度为的子序列:
m
,并且我们将每个序列之间的延迟表示为:d
。这被称为Takens嵌入。因此例如如果
d=m=4
或者如果我们设置
d=1
和m=4
,我们得到:任何
d>1
和m>1
都是有效的。如何预处理数据集取决于您的问题。我建议尝试各种窗口技术,然后比较结果。据我所知,在选择窗口大小方面没有黄金法则。