时间序列转换为Keras输入

时间:2018-03-30 15:48:59

标签: input keras time-series

我有时间序列数据(ECG)。我有30秒的块注释。 每个块有1000个数据点。我们有500个这样的数据块。

目标,注释是例如在1到5的范围内。

要清楚,请参见图 enter image description here

关于X-DATA

如何将其转换为输入数据的Keras表示法[样本,时间步长,功能]?

我的猜测:

  • Samples = Blocks(500)
  • 时间步=值(1000)
  • features = ECG as itselve(1)

导致[500,1000,1]

关于Y-Data(目标)

我的目标或数据会导致 [500,1,1]

经过一次热门​​编码后就可以了 [500,5,1]

问题在于Keras期望X和y数据具有相同的尺寸。但是将我的ydata增加到每个时间步长1000对我来说没有意义。

感谢您的帮助

P.S。不能直接回答,因为我和我的父母在法律上。提前致谢

1 个答案:

答案 0 :(得分:1)

我认为你正在考虑错误。根据我的理解,基于你的图表。 在一次热编码之后,y实际上是(500,5)。也就是说,对于每个块,都有一个结果。

此外,在Keras中不需要X和y具有相同的尺寸(除非你有seq2seq要求,这不是这里的情况)。

我们想要的是给我们概率分布的模型 每个块的可能标签,我们将使用softmax实现 在最后一个(Dense)图层上。

以下是我模拟问题的方法:

import numpy as np
from keras.models import Model
from keras.layers import Dense, LSTM


# using eye doesn't capture one-hot but works for the example
series = np.random.rand(500, 1000, 1)
labels = np.eye(500, 5)

inp = Input(shape=(1000, 1))
lstm = LSTM(128)(inp)
out = Dense(5, activation='softmax')(lstm)
model = Model(inputs=[inp], outputs=[out])
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(series, labels)