我的问题最好举一个例子: 假设我们在5分钟的间隔内在不同的时间长度内收集了10个人的血液值。因此,例如,患者1(P1)有200个观察结果(约16.6h),而患者2(P2)有300个观察结果(25h)。
到目前为止,我可以观察一名患者,将时间序列放入带有滑动窗口的监督学习任务中(例如train_x = [[[p1_1], [p1_2], [p1_3]],[[p1_2], [p1_3], [p1_4]], ...]; train_y = [[p1_4, p1_5, p1_6], [p1_5, p1_6, p1_7]]
,并在某些火车分割中训练有状态LSTM并获得拆分另一部分的预测。
示例代码:
model = Sequential()
model.add(LSTM(n_neurons, batch_input_shape=(1, 3, 1), stateful=True))
model.add(Dense(3)
for i in range(nb_epoch):
model.fit(train_x, train_y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
model.reset_states()
我的模型设置为将三个观测值作为输入,并为接下来的三个时间步长提供预测。目前,我的批次大小为1,因此我的LSTM层的值为batch_input_shape=(1, 3, 1)
。
我所苦恼的是如何在多个时间序列上训练网络,所以最终我有了1个模型,可以根据对该患者的早期观察给出对新患者数据的预测。
仅设置batch_input_shape to (10, 3, 1)
就足够了
但是,那又是什么意思呢?我可以假设批次如下:
Batch 1: [[[p1_1], [p1_2], [p1_3]],[[p1_2], [p1_3], [p1_4]], etc.]
Batch 2: [[[p2_1], [p2_2], [p2_3]],[[p2_2], [p2_3], [p2_4]], etc.]
...
如果我考虑一下,那可能没有任何意义,因为如果我附加其他患者的Trainings数据,我的train_x
只是所有观察值的集合(例如,如果P1和P2合并,则为500 )。
但是我又该如何告诉模型,在满足第一位患者的所有观察结果之后,该模型必须重置状态? (因此,在这种情况下,经过200次观察(或197个训练示例 [由于滑动窗口为3] )