我认为用 LSTM 做滑动窗口没有多大意义。该层的整个想法是捕获长期依赖关系,而您只是将其与 5 步窗口限制一起丢弃。
对于这种情况,最简单的方法是使用Conv1Dwith kernel_size=5。然后windows会随着内核大小自动运行。(但只有一层,如果添加更多,您将捕获更多步骤)。其他可能性是内核大小 = 3 的 2 层,或者大小为 3、2、2 的 3 层。
如果您确实想将 Windows 与 LSTM 一起使用,则必须手动组织数据。这意味着您将循环数据并获取长度为 5 的段,并将每个段视为一个单独的序列。
在这种情况下,您的输入形状将是(5,1)并且您将拥有超过 82 个样本。另一方面,如果您的所有集合都长于长度 5,则根本不需要填充。
示例循环:
originalData = load_a_list_of_samples()
windowData = []
for sample in originalData:
L = len(sample) #number of time steps
for segment in range(L - 5 + 1):
windowData.append(sample[segment:segment+5])
windowData = np.array(windowData)
不过,我的建议是,除非您出于某种特殊原因有此要求,否则根本不要使用 Windows。让 LSTM 完成他们的工作并捕获长期依赖关系。
按预期填充数据,使用Masking图层并将 LSTM 与return_sequences=True.
结果将像(仅显示长度尺寸)
inputs = [step1 , step2 , step3 , step4 , step5 , step6 , step7 ]
outpus = [class1, class2, class3, class4, class5, class6, class7]
确保你也屏蔽了你的损失函数,因为我不确定 Keras 会在那里正确地完成屏蔽工作。