了解有状态LSTM

时间:2019-07-15 14:40:13

标签: python keras lstm batch-processing

我的问题最好举一个例子: 假设我们在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]

0 个答案:

没有答案